过滤删除小脚本(find,grep,xargs,rm连用)

讨论其他BSD项目及其衍生品,如:FreeBSD,DragonFlyBSD,PC-BSD,DesktopBSD,FreeNAS,NAS4Free,m0n0wall,pfSense,pacBSD,OpenDarwin...
回复
wkx9dragon
锌 Zn
帖子: 493
注册时间: 2010-02-02 18:00

过滤删除小脚本(find,grep,xargs,rm连用)

帖子 wkx9dragon » 2011-11-11 10:24

自己的编程练习,文件夹,长时间下来,积累了不少垃圾,那天看sed用法,无意中发现grep的好用用法。
比如,我的wkx9dragon 目录下有一堆文件和目录,我只想保留某些文件,比如*.cpp,*.c,*.h,*.bat,*.py,我就这么写,语句。

find wkx9dragon -type f | grep -v --perl "\.cpp$|\.c$|\.h$|\.bat$|\.py$" | xargs -I {} rm -v {}

简单吧,一行语句搞定!
1. gnu find 很奇怪, find wkx9dragon -type f 这样写就可以,这样写就不可以find -type f wkx9dragon。 -type f 表示筛选普通文件,目录等特殊文件不要。

2.grep -v --perl 中-v表示反向选定,--perl 表示使用perl的正则语法,我觉得perl正则语法就通用。$符号,表示结尾,如果没有他,像什么*.cpp~,*.cpp.bak都被筛选出来而,那可不是我想要的。 引号里的| 那就表示或的意思了,\是转义符号,正则语法保留了一些特殊符号,像什么 . * ^ $ \等等。用\.就是表示字符.的意思。

3. xargs 不好意思我就只会 xargs -I {} command {} 那么用,别的还真不会。
好了,就罗嗦那么多了。大家会得别笑话,不会的,让我小小虚荣心美一下。呵呵。

头像
leo
帖子: 2465
注册时间: 2010-01-21 3:27

回复: 过滤删除小脚本(find,grep,xargs,rm连用)

帖子 leo » 2011-11-11 11:06

搬个小板凳听课,希望后排没有随身带砖头。:)

回复

在线用户

正浏览此版面之用户: 没有注册用户 和 0 访客