find命令的基本語法格式:
find [options] [查找路徑] [查找條件] [處理動作]
查找路徑:默認爲當前目錄
查找條件:默認爲查找指定路徑下的所有文件
處理動作:默認爲顯示
常用查找條件:
-name glob_expr 根據文件名查找,支持glob通配符:?, *, [], [^]
-name glob_expr 根據文件名查找,但不區分字符大小寫。
-user username 根據用戶名查找
-group groupname 根據用戶組名稱查找
-uid UID 根據用戶的UID查找
-gid GID 根據用戶的GID查找
-nouser 查找沒有屬主的文件
-nogroup 查找沒有屬組的文件
-type TYPE 根據文件類型查找。主要文件類型:f, d, l, b, c, s, p
-size [+|-]SIZE 根據文件的大小查找。常用單位:k, M, G
+SIZE : 表示匹配 x > SIZE 單位大小的文件。例:find –size +5k, 查找當前目錄下文件大小大於5k的文件。
-SIZE : 表示匹配 x <= (SIZE - 1) 單位大小的文件。例:find –size -5k, 查找當前目錄下文件大小小於等於4k的文件。
SIZE : 表示匹配 (SIZE – 1) < x <= SIZE 單位大小的文件。例:find –size 5k, 查找當前目錄下文件大小處於4k和5k之間的文件。
根據時間戳查找(以現在向過去方面爲時間軸):
以天爲單位(time):
-atime [+|-]num 根據過去的訪問時間查找
-mtime [+|-]num 根據過去的修改時間查找
-ctime [+|-]num 根據過去的改變時間查找
以分鐘爲單位(minute):
-amin [+|-]num 根據過去的訪問時間查找
-mmin [+|-]num 根據過去的修改時間查找
-cmin [+|-]num 根據過去的改變時間查找
其中, + :表示過去(num + 1)單位時間之前
- : 表示過去num單位時間到現在
無符號 : 表示過去 (num + 1) > x >= num 單位時間段
根據權限查找:
-perm [+|-]MODE
MODE : 精確匹配
+MODE : 匹配任何一類用戶的任何一位權限。當某類用戶的的MODE位爲’0’時,表示不檢查該類用戶的權限。例: –perm +001,匹配其它類用戶有執行權限的文件。不檢查文件的屬主和屬組權限,因爲對應的MODE位爲’0’。
-MODE : 匹配每類用戶的權限子集。例: –perm -555,匹配屬主,屬組和其它類用戶都具有讀和執行權限的文件。那麼MODE爲555,755,775,777的文件都匹配。
處理動作
-print 默認動作,將查找到的結果打印在標準輸出上。
-ls 以長格式輸出查找到的所有文件。
-exec COMMAND {} \; 對查找到的所有文件執行COMMAND命令,其中’{}’是命令參數佔位符。find命令把查找到的所有文件一次性地傳遞給 –exec 所指定的命令,但有些系統對能夠傳遞給exec的命令長度有限制,這樣在find命令運行幾分鐘之後,就會出現 溢出錯誤。錯誤信息通常是“參數列太長”或“參數列溢出”。因此,在某些情況下,可以通過 find | xargs COMMAND 的方式來代替 –exec COMMAND 的方式避免這種問題。因爲find命令把匹配到的文件傳遞給xargs命令,而xargs命令每次只獲取一部分文件而不是全部,不像-exec選項那樣。這樣它可以先處理最先獲取的一部分文件,然後是下一批,並如此繼續下去。
例:
find –perm –003 –a –type f –exec chmod o-wx {} \;
find –perm –003 –a –type f | xargs chmod o-wx
有些情況必須利用佔位符才能完成的,就無法用xargs的方式實現了。例:
find –name “*.doc” –exec mv {} {}x \; 將當期目錄下查找到的所有以後綴”.doc”結尾的文件,改變爲以後綴”.docx”結尾。
-ok COMMAND {} \; 以交換的方式,對查找到的所有文件執行COMMAND命令。