find 一些常用參數的一些常用執行個體和一些具體用法和注意事項。
1.使用 name 選項:
檔案名選項是 find 指令最常用的選項,要麼單獨使用該選項,要麼和其他選項一起使用。 可以使用某種檔案名模式來比對檔案,記住要用引号将檔案名模式引起來。不管目前路徑是什麼,如果想要在自己的根目錄 $HOME 中查找檔案名符合 *.log 的檔案,使用 ~ 作為 ‘pathname’參數,波浪号 ~ 代表了你的$HOME目錄。
find ~ -name "*.log" -print
想要在目前目錄及子目錄中查找所有的 ‘*.log’ 檔案,可以用:
find . -name "*.log" -print
想要在目前目錄中查找檔案名以一個大寫字母開頭的檔案,可以用:
find . -name "[A-Z]*" -PRINT
想要在/etc 目錄中查找檔案名以 host 開頭的檔案,可以用:
find /etc -name "host*" -print
想要查找$HOME 目錄中的檔案,可以用:
find ~ -name "*" -print 或 find . -print 注釋:~ 即為 $HOME 使用者家目錄
要想讓系統高負荷運作,就從跟目錄開始查找所有的檔案。
find / -name "*" -print
如果想在目前目錄查找檔案名以一個個小寫字母開頭,最後是4到9加上.log結束的檔案:
find . -name "[a-z]*[4-9].log" -print
2.用perm 選項
按照檔案權限模式用 -perm 選項,按檔案權限模式來查找檔案的話。最好使用八進制的權限表示法。
如在目前目錄下查找檔案權限位為755 的檔案,即檔案屬主可以讀、寫、執行,其他使用者可以讀、執行的檔案,可以用:
find . -perm 755 -print
或者,在八進制資料前面加上一個橫杠,表示都比對,如-007 就相當于 777, -005 相當于 555.
find . -perm -005
3.忽略某個目錄:
如果在查找檔案時希望忽略某個目錄,因為你知道那個目錄中沒有你所要查找的檔案,那麼可以使用 -prune 選項來指出需要忽略的目錄。在使用 -prune 選項時要當心,因為如果你同時使用了 -depth 選項,那麼 -prune 選項就會被find 指令忽略。如果希望在 test 目錄下查找問價,但不希望 在 test/test3 目錄下查找,可以使用:
find test -path "test/test3" -prune -o -print
4.使用 find 查找檔案的時候怎麼避開某個檔案目錄:
執行個體1.在test 目錄下查找不在 test4 子目錄之内的所有檔案
find test -path "test/test4" -prune -o -print
說明:
find [-path ..] [expression]
在路徑清單的後面是表達式
-path "test" -prune -o -print 是 -path “test” -a -prune -o -print 的簡寫表達式按順序求值,
-a 和 -o 都是短路求值,與 shell 的&& 和 || 類似。
-path “test” 為真,則求值 -prune , -prune 傳回真,與邏輯表達式為真;否則不求值 -prune 與邏輯表達式為假。
如果 -path “test” -a -prune 為假,則求值 -print , -print 傳回真,或邏輯表達式為真;否則不求值 -print ,或邏輯表達式為真。
這個表達式組合特例可以用僞代碼寫為:
if -path "test" then
-prune
else
執行個體2:避開多個檔案夾
find test \( -path test/test4 -o -path test/test3 \) -prune -o -print 注釋:圓括号表示表達式的結合。 \ 表示引用,即訓示shell 不對後面的字元作特殊解釋,而留給 find 指令去解釋其意義。
執行個體3:查找某一确定檔案, -name 等選項加在 -o 之後
find test \(-path test/test4 -o -path test/test3 \) -prune -o -name "*.log" -print
5.使用 user 和 nouser 選項:
按檔案屬主查找檔案:
執行個體1.在 $HOME 目錄中查找檔案屬主為 ack 的檔案
find ~ -user ack -print
執行個體2:在 /etc 目錄下查找檔案屬主為 ack 的檔案
find /etc -user ack -print
執行個體3:查找屬主賬戶已經被删除的檔案,可以使用 -nouser 選項。在 /home 目錄下查找所有的這類檔案
find /home -nouser -print
說明:這樣就能夠找到那些屬主在 /etc/passwd 檔案中沒有有效賬戶的檔案。在使用 -nouser 選項時,不必給出使用者名; find 指令能夠為你完成相應的工作。
6.使用 group 和 nogroup 選項
就像 user 和 nouser 選項一樣,針對檔案所屬于的使用者組,find 指令也具有同樣的選項。
7.按照更改時間或通路時間等查找檔案
如果希望按照更改時間來查找檔案,可以使用 mtime , atime , ctime 選項,如果系統突然沒有可用空間了,很可能某一個檔案的長度在此期間增長迅速,這時就可以用mtime 選項來查找這樣的檔案。
用減号 - 來限定更改時間在距今 n 日以内的檔案,而用加号 + 來限定更改時間在距今 n 日以前的檔案
希望在系統根目錄下查找更改時間在5日以内的檔案,可以用:
find / -mtime -5 -print
查找/var/dam 目錄下更改時間在 3 日以前的檔案,可以用:
find /var/adm -mtime +3 -print
8.查找比某個檔案新或舊的檔案
如果希望查找更改時間比某個檔案新但比另一個檔案就的所有檔案,可以使用 -newer 選項。
它的一般形式為:
newest_file_name ! oldest_file_name
其中, ! 是邏輯非符号。
執行個體1:查找更改時間比檔案 001.log 新 但比檔案 002.log 舊的檔案
指令:
find -newer 001.log ! -newer 002.log <<<<<<<<<<<<<<<<<<<
執行個體2:查找更改時間在比002.log 檔案新的檔案
find . -newer 002.log -print
9.使用 type 選項:
執行個體1:在 /etc 目錄下查找所有目錄
find /etc -type d -print
執行個體2:在目前目錄下查找除目錄以外的所有類型的檔案
find . ! -type d -print
執行個體3:在 /etc 目錄下查找所有的符号連結檔案
find /etc -type l -print
10.使用 size 選項:
可以按照檔案長度來查找檔案,這裡所指的檔案長度既可以用塊(block)來計量,也可以用自己來計量。以位元組計量檔案長度的表達形式為 N c;以塊計量檔案長度隻用數字表示即可。
在按照檔案長度查找檔案時,一般使用這種以位元組表示的檔案長度,在檢視檔案系統的大小,因為這時使用塊來計量更容易轉換。
執行個體1:在目前目錄下查找檔案長度大于1 M位元組的檔案
find . -size +1000000c -print
執行個體2:在 /home/apache目錄下查找檔案長度恰好為 100 位元組的檔案:
find /home/apache -size 100c -print
執行個體3:在目前目錄下查找長度超過10塊的檔案(一塊等于 512位元組)
find . -size +10 -print
11.使用 depth 選項:
在使用 find 指令時,可能希望先比對所有的檔案,再在子目錄中查找。使用depth 選項就可以使find 指令這樣做。這樣做的一個原因就是,當在使用find 指令向錄音帶上備份檔案系統時,希望首先備份所有的檔案,其次在備份子目錄中的檔案。
執行個體1:find 指令從檔案系統的根目錄開始,查找一個名為 CON.FILE 的檔案。
find / -name "CON.FILE" -depth -print
說明:它将首先比對所有的檔案然後再進入子目錄中查找
12.使用 mount 選項:
在目前的檔案系統中查找檔案(不進入其他檔案系統),可以使用 find 指令的 mount 選項。
執行個體1:從目前目錄開始查找位于檔案系統中檔案名為 XC 結尾的檔案
find . -name "*.XC" -mount -print
----------今天這課好長,脖子都酸了。