天天看點

我常用的find指令

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  

繼續閱讀