Chinaunix首页 | 论坛 | 博客
  • 博客访问: 703251
  • 博文数量: 95
  • 博客积分: 1773
  • 博客等级: 上尉
  • 技术积分: 1653
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-17 23:28
文章分类
文章存档

2018年(2)

2017年(10)

2016年(7)

2015年(48)

2014年(2)

2013年(2)

2012年(2)

2011年(7)

2010年(7)

2009年(3)

2008年(1)

2007年(4)

分类: LINUX

2017-07-21 10:06:27

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"的目录。

命令行批量操作其实是一把双刃剑,用的好时很方便,但如果稍有不慎,就可能出现无法估量的危害,
这点需要深刻认识。
阅读(2081) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~