find:

? ? ?實時查找工具,通過遍歷指定起始路徑下的文件系統層級結構完成文件查找:

工作特性:

? ? 查找速度略慢

? ? 精確查找

? ? 實時查找

用法:

?find [option] [查找起始路徑][查找條件][處理動作]


查找起始路徑:指定具體搜索目標起始路徑;默認為當前目錄

查找條件:指定的查找標準,可以根據文件名、大小、類型、從屬關系、權限等標準進行:默認為找出指定路徑下的所有文件:

處理動作:對符合查找條件的文件作出的操作,例如刪除等操作;默認為輸出至標準輸出;

查找條件:

? 表達式:選項和測試

測試:

? 根據文件名查找:

?-name "pattern"

?-name "pattern"

? ? ? ? 支持glob風格的通配符:

? ? ? ? ?*,?,[],[^]

-regex pattern:基于正則表達式模式查找文件,匹配是整個路徑,而非其名;


根據文件從屬關系查找:

-user USERNAME:查找屬于屬主指定用戶的所有文件

-group GROUPNAME:查找數組指定組的所有文件

-uid UID:查找屬主指定的UID的所有文件

-gid GID:查找數組指定的GID的所有的文件

-nouser:查找沒有屬主的文件

-nogroup:查找沒有數組的文件



根據文件的類型查找:

-type TYPE

?f:普通文件

?d:目錄文件

?l:符號鏈接問

?b:塊設備文件

?c:字符設備文件

?p:管道文件

?s:套接字文件


組合測試:

? ?與:-a,默認邏輯組合

? ?或:-o,

? ?非:-not,!


根據文件大小查找

-size [+|-]+Unit

? 常用單位: k,M,G

? #Unit:(#-1,]

比如當前目錄下找出大小等于175k的文件,find -size 175k ls,那么小于或者等于175k都滿足,小不能等于174,大于不能超過175

? -#Unit:[0,-1

? +#Unit:(#,)



根據時間戳查找


以"天"為單位

? -atime[+|-]#

? ? #:[#,#-1],過去的天數,換句話說就是N天前

? ? -#:(#,0],N天內訪問時間

? ? +#:(#,---):

accesstime(atime)

當使用這個文件的時候就會更新這個時間

? -mtime

modification time(mtime):當修改文件的內容數據的時候,就會更新這個時間,而更改權限或者屬性,mtime不會改變,這就是和ctime的區別

? -ctime

status time(ctime)

當修改文件的權限或者屬性的時候,就會更新這個時間,ctime并不是create time,給我的感覺更像是change time,但這么說也不完全對,因為只有當更新文件的屬性或者權限的時候才會更新這個時間,更改內容的話是不會更新這個時間的


總結一下:

-mtime ? -n +n ? ? ? ? ? ? ?#按文件更改時間來查找文件,-n指n天以內,+n指n天以前

-atime ? -n +n ? ? ? ? ? ? ?#按文件訪問時間來查GIN: 0px">

-ctime ? -n +n ? ? ? ? ? ? ?#按文件創建時間來查找文件,-n指n天以內,+n指n天以前


以"分鐘"為單位

? -amin

? -mmin

? -cmin


根據權限查找

mode:精確匹配

/mode:任何一類用戶(u,g,o)的權限中任何一位(r,w,x)符合條件即滿足

9位權限之間存在的"或"關系

-mode:每一類用戶(u,g,o)的權限中的每一位(r,w,x)同時符合條件即滿足

9位權限之間存在的"與"關系


處理動作:

? -print:輸出至標準輸出,默認的動作

? -ls:類似于對查找的文件執行"ls -l"命令,輸出文件的詳細信息

? -delete:刪除查找到的文件

? -fls /path/to/somefile:把查找到的所有文件的長格式信息保存到指定文件中;

? -ok COMMAND {} \;:對查找的每個文件執行COMMAND表示的命令,每次操作要要用戶確認

? -exec COMMAND {} \;:對查找的每個文件執行COMMAND表示的命令,無需用戶確認,直接完成

例如:

find ./ -perm /002 -exec mv {} {}.danger \;

{}是占位符,這里代表找到的文件

注意:find傳遞查詢到的文件路徑至后面的命令時,是先查找到所有符合條件的文件路徑,并一次性傳遞給后面命令:

但是有些命令不能接受過長的參數,此時命令執行會失敗;另外一種方式可規避此問題:

find | xargs COMMAND