我常用的find命令

索引

基础

exec执行命令

文件名或查找

忽略文件

用find查找以abc开头,但不包含“.”的文件的方法


 

find . -name "*.c" 在当前目录及其子目录(用“.”表示)中查找任何扩展名为“c”的文件

 

find . -name "*Iden*" -exec rm {} \;

 

find ./  \( -iname "*.c" -or -iname "*.cc" \)   查找以.c或.cc结尾的文件  忽略大小写

find -regex ".*\.\(xls\|csv\)"   查找以xls 或csv 结尾的文件

 find -name "*.xls" -o -name "*.csv"  同上

 

 

find / -path /mnt -prune -o -regex ".*\.\(cc\|h\)"

find / \( -path /dev -o -path /var -o -path /mnt \) -prune -o -name "*.cc"|wc -l

 


 

用find查找以abc开头,但不包含“.”的文件的方法

 

如下三种方法都可以:

 

1.

 

  1. find . -name "abc*" ! -name "*.*" -print

 

2.

 

  1. find . -regex '.*/abc[^.]*'

 

3.

 

  1. find . -name "*.*" -o -name "abc*" -print

 

第一种方法是最容易理解的了,第二个 -name前的 ! 号表示 -not, 与-not的意义是相同的,所以也可以写成:

 

find . -name "abc*" -not -name "*.*" -print

 

 

 

第二种方法: 因为用-name选项的时候,find不支持正则表达式,此时要使用 -regex选项

 

正则式: '.*/abc[^.]*'

 

.*/ 表示在当前目录及下及目录中找

 

[^.]* 表示abc后匹配任意字符,除了.

 

 

 

第三种方法看起来很难理解

 

因为-o 是 or 的意思,也就是或

 

猛的看起来好像是说找到所有含有. 或者以abc开头的

 

其实不然

 

这两个-name构成了这样形式的表达式

 

Exp1 or Exp2

 

如果Exp1 为真的话,就不会再判断Exp2

 

如果Exp1为假,才执行Exp2,非常类似于C语言中的 " || " 符号

 

所以,如果匹配到有.的文件名,则不会执行后面的了,所以-print此时不会打印

 

 

 

今天也意外的发现了一点

 

find [path...] [expression]

 

在最后可以用 -exec command

 

如下:

 

find . -name "abc*" -exec ls {} /;

 

以前一直不明白后面加个 {} /;是干什么的

 

今天总算知道了

 

其实{} 表示匹配到前面的文件

 

所以,你也可以这样用:

 

find . -name "abc*" -exec mv {} {}.old /;

 

此时所完成的功能就是:

 

将所有以abc开关的文件,全部在后面加上 .old 后缀

 

2  

posted @ 2011-08-18 14:23  wangkangluo1  阅读(478)  评论(0编辑  收藏  举报