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.
- find . -name "abc*" ! -name "*.*" -print
2.
- find . -regex '.*/abc[^.]*'
3.
- 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