加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

linux下删除指定文件外的其他文件详解

(2016-07-31 00:38:14)
标签:

啄木鸟

linux

删除文件

指定文件

其他文件

分类: Linux学习笔记
删除指定文件外的其他文件有以下方法:

其一:复制需要保留的文件到其他文件夹,然后将该目录删除。然后再将需要保留的文件给移回来,此方法较为繁琐。

其二:直接在当前文件夹中进行,
#:shopt -s extglob      (打开extglob模式)
#:rm -rf !(keep) #删除keep文件之外的所有文件
#:rm -rf !(keep1|keep2) #删除keep1和keep2文件之外的所有文件

其三:在当前文件夹中使用grep和xargs来处理文件名
#:ls |grep -v keep |xargs rm    #删除keep之外的所有文件
解释:-v参数决定了匹配之外的结果。即keep之外的所有文件名
xargs用来从标准输入获得参数,并且传递给后面的命令,此处命令为rm

其四:使用find命令,替代ls,改进法三,从而得到所需结果
#:find /tmp/test.txt |grep -v keep |xargs rm    #删除当前文件夹中keep之外的所有文件
解释:用grep而不用find -name选取名字,因为find选取名字是比较麻烦,对正则表达支持不够,无法排除指定文件名

其五:直接使用find命令删除其他文件,
#:find / -name "[^k][^e][^e][^p]" -exec rm -rf {} \;  #删除keep以外的其他文件
#:find / -name "[^k][^e][^e][^p]" |xargs rm -rf   #删除keep以外的其他文件(推荐使用)

解释:第二行的代码效率高与第一行,原因在于删除到个文件时,-exec会启动多个进程来处理。而xargs会启动一个rm进程来处理

关于关于xargs的一些说明:
之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,
而日常工作中有有这个必要,所以就有了xargs命令,
例如:
这个命令是错误的
find /sbin -perm +700 |ls -l
这样才是正确的
find /sbin -perm +700 |xargs ls -l 

关于关于-exex的一些说明
-exec  参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。
{}   花括号代表前面find查找出来的文件名。

使用find时,只要把想要的操作写在一个文件里,就可以用exec来配合find查找,很方便的
建议在真正执行rm命令 删除文件之前,最好先用ls命令看一下,确认它们是所要删除的文件。
 exec选项后面跟随着所要执行的命令或脚本,然后是一对儿{ },一个空格和一 个\,最后是一个分号。
为了使用exec选项,必须要同时使用print选项。如果验证一下find命令,会发现该命令只输出从当前路径起的相对路径及文 件名

例如:
#:
find -type -mtime +14 -exec rm {} \;   #在目录中查找更改时间在14天一天的文件,并删除
在shell中用任何方式删除文件之前,应当先查看相应的文件,一定要小心!当使用诸如mv或rm命令时,可以使用-exec选项的安全模式。它将在对每个匹配到的文件进行操作之前提示你。
 
相关截图有待上传,文章根据蓝色角落改写

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有