Linux 下利用find批量安全删除带空格的文件

2030阅读 0评论2017-07-21 xdsnet
分类:LINUX

Linux下批量删除某个格式文件(目录)相对来说是比较方便的,一般可以利用find来完成,比如

点击(此处)折叠或打开

  1. find ./ -name "*.jpg" | xargs rm
就可以删除当前目录下的jpg文件,但这样其实会出现错误,因为搜索到的jpg文件名中如果含有空格,
就会在rm时解析为多个“文件”而出现删除错误,有2种错误信息,其一是找不到而不能删除,它的危
害其实还小一些,另外一种错误是因为拆分后出现可能不需要删除的文件,从而误删,比如一个文件
名为"abc.txt abc.jpg"的文件,采用前面的语句执行时,会删除掉"abc.txt"和”abc.jpg"两个文件,但期
望的其实只是想删除"abc.txt abc.jpg"这一个文件的,而且过程中可能还不会报错!(比如这两个文件
本身都存在时就是说你都不知道多删除了!!!)
所以在执行相应操作时必须要慎重。这里提供两种更安全的处理方法来进行类似操作。
其一是

点击(此处)折叠或打开

  1. find ./ -name "*.jpg" | xargs -d "\n" rm
这里在xargs执行中指定了分隔符为换行符,所以find找到的文件信息中已有的空格等将作为整体作
为rm参数,相当于 rm "",这样就不会在匹配结果有空格时出现错误了。
另外一种是

点击(此处)折叠或打开

  1. find ./ -name "*.jpg" -execdir rm {} \;
这里利用execdir选项直接在find操作中执行删除,也不会在有空格的时候出现错误。

当然为了安全,还可以利用find的其他一些参数进行限定,进一步保障执行的准确率,比如

点击(此处)折叠或打开

  1. find ./ -name "*.jpg" -type f -execdir rm {} \;
就只会匹配文件进行删除,而不会删除诸如"ccc.jpg"的目录。

命令行批量操作其实是一把双刃剑,用的好时很方便,但如果稍有不慎,就可能出现无法估量的危害,
这点需要深刻认识。
上一篇:HTPC+NAS+ROUTER(wifi)的实现
下一篇:Debian 下从CD(镜像文件)中抓取音轨