find命令詳解
實時查找工具,通過遍歷指定起始路徑下文件系統層級結構完成文件查找;
一、工作特性:
- 查找速度略慢;
- 精確查找,只查找文件路徑的基名而非整個路徑;
- 實時查找;
- 可能只搜索用戶具備讀取和執行權限的目錄
二、 用法:
find [查找起始路徑] [OPTIONS] [查找條件] [處理動作]
- 查找起始路徑:指定具體搜索目標起始路徑;默認為當前目錄;
- 查找條件:指定的查找標準,可以根據文件名、大小、類型、從屬關系、權限等等標準進行;默認為找出指定路徑下的所有文件;
- 處理動作:對符合查找條件的文件做出的操作,例如刪除等操作;默認為輸出至標準輸出;
1. 查找起始路徑
查找時,可以指定搜索層級:
- -maxdepth level 最大搜索目錄深度,指定目錄為第一等級,其子目錄為2等級;
-
-mindepth level 最小層級目錄深度搜索,指最少搜索多少層
例子:只顯示目錄的二層,
~]$find -maxdepth 2 -mindepth 2 -name file
2、查找條件
即表達式,由選項和測試組成;測試結果通常為布爾型(”true”, “false”)
①根據文件名和inode查找:
- -name “pattern”:區分字符大小寫
-
-iname “pattern”:不區分字符大小寫
注意:此處pattern支持glob風格的通配符;例如 *, ?, [], [^] - -samefile name 相同inode好的文件
- -links n 鏈接數為n文件
- -regex pattern:基于正則表達式模式查找文件,匹配是整個路徑,而非基名;一般不用;
② 根據文件從屬關系查找:
- -user USERNAME:查找屬主指定用戶的所有文件;
- -group GRPNAME:查找屬組指定組的所有文件;
- -uid UID:查找屬主指定的UID的所有文件;
- -gid GID:查找屬組指定的GID的所有文件;
- -nouser:查找沒有屬主的文件(不用跟用戶名);
- -nogroup:查找沒有屬組的文件(不用跟組名);
③ 根據文件的類型查找:
-
-type TYPE:
f: 普通文件
d: 目錄文件
l:符號鏈接文件
b:塊設備文件
c:字符設備文件
p:管道文件
s:套接字文件
④ 組合測試:
- 與:-a, 默認組合邏輯,可??;
- 或:-o
- 非:-not, !
-
德.摩根定律
-
(非P)或(非Q)=非(P且Q)
+(非P)且(非Q)=非(P或Q)
注意:使用摩根定律時括號加上轉義符\
例子:
!A -a !B = !(A -o B)
!A -o !B = ! (A -a B)
-
(非P)或(非Q)=非(P且Q)
⑤ 根據文件的大小查找:
-
-size [+|-]#UNIT
常用單位:k, M, G-
#UNIT:(#-1, #]
如:6k 表示(5k,6k] -
-#UNIT:[0,#-1]
如:-6k 表示[0,5k] -
+#UNIT:(#, oo)
如:+6k 表示(6k,無窮)
-
#UNIT:(#-1, #]
⑥ 根據時間戳查找:
以“天”為單位:
-
-atime [+|-]#
- #:[#, #-1)
- -#:(#, 0]
- +#:(oo, #-1]
- -mtime
- -ctime
以“分鐘”為單位:
- -amin
- -mmin
- -cmin
⑦ 根據權限查找:
-
-perm [/|-]mode
- -mode:精確權限匹配;每一類用戶(u,g,o)的權限中的每一位(r,w,x)同時符合條件即滿足;9位權限之間存在“與”關系;非0權限位的“與”;只有當前面有/或者-時候,0表示不關注
-
/mode:任何一類用戶(u,g,o)的權限中的任何一位(r,w,x)符合條件即滿足;9位權限之間存在“或”關系;非0權限位的“或”;
find -perm 755 會匹配權限模式恰好是755的文件
只要當任意人有寫權限時,find-perm+222就會匹配
只有當每個人都有寫權限時,find-perm-222才會匹配
只有當其它人(other)有寫權限時,find-perm-002才會匹配
#### ⑧ 查找比某個文件新或比某個文件舊
-
-newer:選項
格式為:-newer newest_file_name ! -newer oldest_file_name
3、處理動作:
- -print:輸出至標準輸出;默認的動作;
- -ls:類似于對查找到的文件執行“ls -l”命令,輸出文件的詳細信息;
- -delete:刪除查找到的文件;
- -fls /PATH/TO/SOMEFILE:把查找到的所有文件的長格式信息保存至指定文件中;
- -ok COMMAND {} \; :對查找到的每個文件執行由COMMAND表示的命令;每次操作都由用戶進行確認;此處{}表示引用找到的文件的文件名;
- -exec COMMAND {} \; :對查找到的每個文件執行由COMMAND表示的命令;此處{}表示引用找到的文件的文件名;
注意:find傳遞查找到的文件路徑至后面的命令時,是先查找出所有符合條件的文件路徑,并一次性傳遞給后面的命令;但是有些命令不能接受過長的參數,此時命令執行會失敗;如下方式可規避此問題:find | xargs COMMAND
原創文章,作者:oranix,如若轉載,請注明出處:http://www.www58058.com/71346
寫的不錯哦,盼盼,很地道,全面,點個贊