UNIX - find 指令

【功能】

找尋符合特定條件的檔案

【語法】

find path-name-list expression

【說明】find 指令會從指定的目錄下開始找尋所需要的檔案,找尋的範圍是以遞迴方式包括該目錄下的檔案及所有子目錄內的檔案。path-name-list 是指定目錄的名稱,可由多個目錄組成,其間以空白字元分隔,若要找尋的目錄是從現行工作目錄下開始,則可使用 '.' 表示;倘若是從根目錄開始則使用 '/' 表示。expression 是用來說明找尋的條件,可使用它來設定尋找的檔案時間、日期型態等相關的資料。

下面是關於expression 較為詳細的介紹,其中選項內的 n 為 10 進位的整數。

+ n 表示大於 n。
- n 表示小於 n。
  n 不帶正負號的 n 則表示剛好為 n。

選項的使用可配合邏輯運算 and、or、not 等的組合,加以靈活運用。邏輯運算的使用如下:

not:在選項的前端使用 '!' 符號。

例如:! -links 1 表示找尋連接數不為 1 的檔案。

and:連續給予選項,不需特別說明。

例如:-name 'project*' -mtime -7 表示要求找尋的檔案名稱必須是以 project 字串為起始,且在七天內曾被修改過的檔案。

or:使用 -o 來連接各個選項。

例如:-name 'project*' -o -name 'data' 表示找尋的檔案必須符合名稱以 project字串為起始,或是名稱是 data的檔案。

另外括號也可輔助邏輯運算的使用,但是為了要避免 shell 程式不正確的處理,故必須要在左右括號前加上 '\'字元,例如:

\(-name leaf -o -name stem \)

【選項】

選 項 說 明
-name pattern 設定要找尋的檔案名稱,若使用萬用字元則須使用引號(請參考範例)。
-perm [-] onum 設定找尋允許權與所指定的 onum相同的檔案。 onum 是以 8進位的數字說明允許權的情形。若在 onum 前加上負號 '-' 則表示只要求與 onum 的設定部分相同即可。例如 onum 為 -040 是表示若群使用者有讀取的權力就符合條件而不必管其餘的條件。
-size n [c] 設定找尋的檔案大小。n 是表示區塊數目(一個區塊 block 是指 512 個 bytes)。若 n 之後接 'c',則表示 n 為字元數。
-atime n 設定要找尋的檔案是在指定的天數內或外曾被存取過的。path-name-list 中的目錄會被 find 指令修改它的存取時間。
-mtime n 設定要找尋的檔案是在指定的天數內或外曾被修改過的。
-ctime n 設定要找尋的檔案是在指定的天數內或外曾被修改過檔案狀態。
-exec cmd 設定要找尋的檔案是符合 cmd 命令傳回值為 0 的狀態(表示成功的結束)。cmd 引數的尾端要加上 '\;'才表示結束,另外,在 cmd 行中的 '{}' 符號表示現行目錄。
-ok cmd 同 -exec cmd,但 -ok cmd 在執行 cmd之前會先印出 cmd的字串,接著會要求使用者輸入 'y' 確認後才去處理。
-print 設定為印出路徑名稱及檔案名稱。
-newer file 設定要找尋的檔案的修改時間是較檔案 file 晚的。
-depth 設定要找尋的檔案是以層次方式,先是指定目錄下所有的檔案,然後才是目錄本身。
-mount 設定要找尋的檔案是在指定目錄下的檔案。若無給予目錄名稱,則指現行處理目錄下的檔案。
-local(express)

設定要找尋的檔案是實際在本地系統上的。

設定要找尋的檔案是符合括號內 express 的運算式。

-type c 設定要找尋的檔案是符合所指定的檔案型式c,c 可為下面字元之一:

b 區塊特殊檔

c 字元特殊檔

d 目錄

l 符號連接檔

p pipe 檔(fifo)

f 一般檔案

-follow 在設定要找尋的檔案時,符號連接檔所連接到的檔案亦會被處理。例如符號連接檔和連接檔所連接的檔案各屬於不同的群,使用此選項後則是對被連接檔案的設定做檢查。
-links n 設定要找尋連接數為 n 的檔案。
-user uname 設定要找尋屬於 uname 使用者所擁有的檔案。若 uname 是數字則表示使用者的識別碼。
-nouser 設定為找尋的檔案不是在 /etc/passwd 檔案中所列使用者所擁有的。
-group gname 設定要找尋屬於 gname 群所擁有的檔案。若 gname 是數字則表示群識別碼。
-nogroup 設定要找尋的檔案不是在 /etc/group 檔案中所列的群所擁有。
-fstype type 設定要找尋的檔案所屬之檔案系統型態為type。
-inum n 設定要找尋檔案的 i-node 號碼是n。
-prune 將 pattern 所指定的目錄跳過不尋找。

★註:選項 -mount、-local 是在 SVR3 版本時才開始提供。選項 -follow、-nouser、-nogroup、-fstype、-inum、-prune 是在 SVR4 版本時才開始提供。

【範例】

1. 找出指定的檔案名稱:

find . -name project* -print

將現行工作目錄下合於條件的檔案印出。選項 -name 要求找尋檔案名稱由 project 字串為起始的檔;選項 -print則會使之印出(若是選項的次序不同,例如:

find . -print -name project*

則結果會完全相異,這命令的結果會將所有的檔案名稱印出),若 path-name-list 是 '.' 字元,代表的是現行工作目錄。

2. 找出含有指定連接數的檔案:

find / ! -link 1 -type f -print

要求 find 指令從根目錄開始,印出所有連接數大於 1 的一般檔案的名稱。

path-name-list 是 '/' 字元,代表根目錄。

3. 找尋指定時間範圍內的檔案:

find . -mtime +365 -exec rm {} \;

將現行工作目錄下超過 365 天以上,並且未曾修改過的檔案刪除。

4. 印出符合特定條件的檔案:

find . -name civic -prune -o -print

將目前目錄下所有的檔案名稱(除了 civic 目錄下的檔案)印出。

5. 印出符合特定條件的檔案:

find . \( -name 'today' -o -name 'day*' \)-print

只要檔案名稱是 today 或是以 day 字串為起始的檔案名稱皆符合條件。

網路電視    旅遊景點    算命    象棋殘局    回首頁