最近打算把一些学习资源解压上传到阿里网盘上,可是在解压的时候出现了问题,无故产生很多隐藏文件(猪哥mac电脑,用的keka解压软件)。
且文件夹层级很多,不可能实现手动一个一个文件夹删除,所以就考虑写一个shell文件来循环遍历,找出所有的隐藏文件,然后删除!

1、循环遍历

既然要循环查找文件,首先要实现的功能肯定是遍历目录,这个功能的代码不难,如下

#!/bin/bash  function traverse(){for file in `ls $1`do# 拼接路径+文件(文件夹)名称file_path=$1"/"$file# 判断是否为目录if [ -d $file_path ];then# 如果是删除目录下以._开头的文件rm -rf "$file_path"/\._*traverse "$file_path"fidone
}traverse "/Volumes/pig/未压缩/07-人工智能"

这样看似没问题,但是执行起来就会发现一个问题:如果文件或者文件夹名称中带有空格,执行ls 时则会把空格当成分隔符:

2、解决文件夹名称带空格

解决ls命令把空格符当成分隔符的方法是:先用其他字符替换,使用后再替换回来。代码如下:

#!/bin/bash  function traverse(){for file in `ls $1 | tr " " "\?"`dofile=`tr "\?" " " <<<$file`file_path=$1"/"$file# 判断是否为目录if [ -d $file_path ];then# 如果是删除目录下以._开头的文件rm -rf "$file_path"/\._*traverse "$file_path"fidone
}traverse "/Volumes/pig/未压缩/07-人工智能"

上面再使用ls之前我们先用?代替空格符,ls完毕在下面替换回来!

3、函数传参合并

上面解决了ls空格问题,当我们把带有空格的文件夹名称递归传入下一个函数,函数同样也会将空格符识别为分隔符,会把一个带空格的路径参数分割成两个参数。

前面我们使用的是$1,也就是引用第一个入参,如果要引用全部入参我们就需要用到$*,而且还要将全部入参合并成一个参数(加引号即可),即:"$*",最终代码如下:

#!/bin/bash  function traverse(){# echo $1for file in `ls "$*" | tr " " "\?"`dofile=`tr "\?" " " <<<$file`file_psth="$1"/"$file"# echo "$file"if [ -d "$file_psth" ]then# echo "1"rm -rf "$file_psth"/\._*traverse "$file_psth"fidone
}traverse "/Volumes/pig/未压缩/07-人工智能"

最后这个文件夹名称带有空格传参问题比较隐蔽,可能有时难以发现!

Linux(shell)遍历目录删除指定文件,解决文件夹名称带空格问题相关推荐

  1. linux遍历目录删除指定文件,利用shell脚本遍历文件夹内所有的文件并作整理统计的方法-linux删除文件夹...

    本篇文章扣丁学堂Linux培训小编给读者们分享一下利用shell脚本遍历文件夹内所有的文件并作整理统计的方法,文章具有很好的参考价值,感兴趣的小伙伴就随小编来了解一下吧. 环境: Ubuntu下采用s ...

  2. linux删除5天前文件和目录,Linux Shell命令定时删除指定目录下n天前的文件

    * 6 * * * find /root/home/zhang/* ctime 1 -exec rm -rf {} \; 表示每天早上六点删除/root/home/zhang目录下一天前创建的所有文件 ...

  3. linux shell sed d删除指定行并更换分隔符为#

    由 / 更换为 #的写法 sed -i "\#${tmp_arr[i]}#d" go.mod #!/bin/bashif [ -f "go.mod" ];the ...

  4. linux删除指定大小的文件,Linux下删除空文件,删除指定大小的文件

    Linux下批量删除空文件(大小等于0的文件)的方法: find . -name "*" -type f -size 0c | xargs -n 1 rm -f 用这个还可以删除指 ...

  5. Unity3D中删除指定路径的文件+删除文件夹

    目录 一.目的 1.想知道:Unity3D中删除Application.streamingAssetsPath里面的文件 1.想知道:unity删除文件夹 二.参考 1.unity 文件和文件夹的创建 ...

  6. linux C 遍历目录及其子目录 opendir -> readdir -> closedir

    在 linux 下遍历某一目录下内容 LINUX 下历遍目录的方法一般是这样的: 打开目录->读取->关闭目录 相关函数是 opendir -> readdir -> clos ...

  7. 利用批处理脚本删除指定日期前文件

    利用批处理脚本删除指定日期前文件 删除指定日期前文件 根据需求可分为两种情况: 一. 以修改时间为准,删除N天之前数据 以修改时间为准删除数据脚本很简单,DOS自有命令即可实现: forfiles / ...

  8. Linux shell 脚本实现u盘挂载及文件拷贝

    Linux shell 脚本实现u盘挂载及文件拷贝 对于linux系统来说.使用mount命令(需管理员模式使用)来进行挂载硬盘 对于我的虚拟机来说.在插入u盘时,使用sudo fdisk -l命令设 ...

  9. java 文件名查找_java 查找目录下指定文件名的文件

    这个Java类的作用是查找目录文件中特定文件名的文件,并不是查找文件内容.具体代码如下: package net.xsoftlab.baike; import java.io.File; import ...

最新文章

  1. 彻底搞懂Java内存泄露
  2. Android 进程常驻(使用第三方MarsDaemon)(虽然不可用,但是还是保留下。)
  3. Selenium3自动化测试——17.控制滑动解锁
  4. 基于ArcGIS JS API封装dojo微件(以工具条为例)
  5. linux snmp进程,linux snmpwalk命令详解
  6. SpringBoot事件与监听机制
  7. MySQL 的发展历史和版本分支:
  8. C++ 普通函数与函数模板 区别以及调用规则01
  9. iOS开发-XMPP
  10. 【消息果留言板 v1.2】支持回复邮件提醒+页面pc端宽度调整+时间友好显示
  11. condition的作用
  12. leetcode题解-买卖股票的最佳时机
  13. 用JavaScript实现的十个图像特效
  14. [置顶] C#中给Label控件设置BackgroundImage属性
  15. 解决安装Win 7后XP无法启动问题
  16. 金山词霸PC企业版2016
  17. 微型计算机处理数据的本质,四川信息职业技术学院2019考纲复习
  18. 使用aireplay-ng抓握手包笔记
  19. --k和k--的区别
  20. Python二期学习开篇语

热门文章

  1. 七十、Vue城市页面Ajax动态渲染和兄弟组件数据传递
  2. tornado连接数据库
  3. keras从入门到放弃(十四)模型的保存
  4. 简单php不用mysql_简单的PHP / MySQL不工作
  5. 网页拉起QQ进行交谈
  6. 从傅里叶分析角度解读深度学习的泛化能力
  7. 详解深度学习中的Normalization,不只是BN(2)
  8. 求助!!css选择器为什么有很多标签查不到
  9. python引用传递的区别_python的值类型和引用类型及值传递和引用传递的区别
  10. python控制51单片机的红绿灯_基于51单片机的红绿灯实现(使用普中科技开发板)...