find命令

KuangZhuMing2發表於2024-05-18

find幫助引數

-amin N: 最後一次訪問檔案的時間(以分鐘計)與 N 相匹配。
-anewer FILE: 最後訪問檔案時間比指定檔案 FILE 新的檔案。
-atime N: 最後一次訪問檔案的時間(以天為單位)與 N 相匹配。
-cmin N: 最後一次更改檔案的時間(以分鐘計)與 N 相匹配。
-cnewer FILE: 最後更改檔案時間比指定檔案 FILE 新的檔案。
-ctime N: 最後一次更改檔案的時間(以天為單位)與 N 相匹配。
-empty: 檔案為空。
-false: 總是返回 false。
-fstype TYPE: 檔案的檔案系統型別與給定的型別 TYPE 匹配。
-gid N: 檔案的組 ID 與給定的 ID N 匹配。
-group NAME: 檔案所屬的組名稱與給定的名稱 NAME 匹配。
-ilname PATTERN: 忽略大小寫,檔案連結的名稱匹配給定的 shell 模式 PATTERN。
-iname PATTERN: 忽略大小寫,檔名稱匹配給定的 shell 模式 PATTERN。
-inum N: 檔案的 inode 號與給定的編號 N 匹配。
-iwholename PATTERN: 忽略大小寫,整個檔案路徑匹配給定的 shell 模式 PATTERN。
-iregex PATTERN: 忽略大小寫,檔案路徑匹配給定的正規表示式 PATTERN。
-links N: 檔案的硬連結數與給定的數量 N 匹配。
-lname PATTERN: 檔案連結的名稱匹配給定的 shell 模式 PATTERN。
-mmin N: 檔案的修改時間(以分鐘計)與 N 相匹配。
-mtime N: 檔案的修改時間(以天為單位)與 N 相匹配。
-name PATTERN: 檔名稱匹配給定的 shell 模式 PATTERN。
-newer FILE: 檔案的修改時間比指定檔案 FILE 新的檔案。
-nouser: 無效使用者擁有該檔案。
-nogroup: 無效組擁有該檔案。
-path PATTERN: 檔案路徑匹配給定的 shell 模式 PATTERN。
-perm [-/]MODE: 檔案許可權與給定的許可權 MODE 匹配。
-regex PATTERN: 檔案路徑匹配給定的正規表示式 PATTERN。
-readable: 檔案可讀。
-writable: 檔案可寫。
-executable: 檔案可執行。
-wholename PATTERN: 整個檔案路徑匹配給定的 shell 模式 PATTERN。
-size N[bcwkMG]: 檔案大小與給定的大小 N 匹配,可選擇指定單位。
-true: 總是返回 true。
-type [bcdpflsD]: 檔案型別與給定的型別匹配。
-uid N: 檔案的使用者 ID 與給定的 ID N 匹配。
-used N: 檔案上次訪問時間與 N 相匹配。
-user NAME: 檔案的所有者名稱與給定的名稱 NAME 匹配。
-xtype [bcdpfls]: 與 -type 相同,但是不跟隨符號連結。
-context CONTEXT: 檔案安全上下文與給定的安全上下文 CONTEXT 匹配。

基本語法

find [路徑...] [表示式]

路徑:指定搜尋的目錄。如果未指定,預設為當前目錄。
表示式:用於過濾搜尋結果的條件,包括運算子、選項、測試和動作。

路徑和表示式選項:

.:當前目錄。
/path/to/dir:指定的目錄路徑。

運算子表示式

-and 或 -a:邏輯與(預設)。
-or 或 -o:邏輯或。
! 或 -not:邏輯非。
( 和 ):分組表示式。

測試

匹配檔名區分大小寫
find . -name "filename.txt"

匹配檔名不區分大小寫
find . -iname "filename.txt

按檔案型別搜尋。常見型別包括:
f:普通檔案
d:目錄
l:符號連結
`find . -type f`

匹配檔案許可權
find . -perm 644

按檔案`所有者`搜尋。
find . -user username


按檔案`所屬組`搜尋
find . -group groupname

按`檔案大小`搜尋。單位可以是 b (位元組),c (字元),w (字),k (千位元組),M (兆位元組),G (吉位元組)。
find . -size +10M

按檔案修改時間搜尋,N 表示天數,+N 表示 N 天前,-N 表示 N 天內。
find . -mtime -7

按檔案訪問時間搜尋。使用方法同 mtime
find . -atime -7

按檔案狀態改變時間搜尋。使用方法同-mtime。
find . -ctime -7

列印匹配的檔名(預設)
find . -name "filename.txt" -print

對每個匹配的檔案執行命令,{} 代表當前檔案,-exec COMMAND {} \;
find . -name "*.txt" -exec cat {} \;

對所有匹配的檔案一次性執行命令。-exec COMMAND {} +:
find . -name "*.txt" -exec ls -l {} +

刪除匹配的檔案(小心使用)-delete
find . -name "*.tmp" -delete

以ls格式列出匹配的檔案
find . -name "*.txt" -ls

跳過某個目錄-prune
find . -path "./dir_to_skip" -prune -o -name "*.txt" -print

查詢並列出所有 .txt 檔案:
find . -name "*.txt" -print

查詢並刪除所有臨時檔案:
find . -name "*.tmp" -delete

查詢所有大於 100MB 的檔案:
find . -size +100M -print

查詢最近 7 天內修改的檔案並執行 ls -l:
find . -mtime -7 -exec ls -l {} \;

跳過某個目錄進行搜尋:
find . -path "./dir_to_skip" -prune -o -name "*.log" -print