find指令用來在指定目錄下尋找檔案。任何位於參數之前的字串都將被視為欲查找的目錄名。如果使用該指令時,不設定任何參數,則find指令將在目前目錄下尋找子目錄與檔案。並且將查找到的子目錄和檔案全部進行顯示。
語法
find(選項)(參數)
選項
-amin:在指定時間尋找已存取的檔案或目錄,單位以分鐘計算;
-anewer:尋找其存取時間較指定檔案或目錄的存取時間更接近現在的檔案或目錄;
-atime:尋找在指定時間曾經存取過的檔案或目錄,單位以24小時計算;
-cmin:尋找在指定時間之時被更改過的檔案或目錄;
-cnewer找出其更改時間較指定檔案或目錄的變更時間更接近現在的檔案或目錄;
-ctime:找出在指定時間時被更改的檔案或目錄,單位以24小時計算;
-daystart:從本日開始計算時間;
- depth:從指定目錄下最深層的子目錄開始查找;
-expty:尋找文件大小為0 Byte的文件,或目錄下沒有任何子目錄或文件的空目錄;
-exec:假設find指令的回傳值為True,就執行指令;
-false:將find指令的回傳值皆設為False;
-fls:此參數的效果與指定「-ls 」參數類似,但會把結果儲存為指定的清單檔案;
-follow:排除符號連接;
-fprint:此參數的效果和指定「-print」參數類似,但會把結果儲存成指定的清單檔案;
-fprint0:此參數的效果和指定「-print0」參數類似,但會把結果儲存成指定的清單檔案;
-fprintf:此參數的效果和指定「-printf」參數類似,但會把結果保存成指定的清單檔案;
-fstype:只尋找該檔案系統類型下的檔案或目錄;
-gid:尋找符合指定之群組識別碼的檔案或目錄;
-group:尋找符合指定之群組名稱的檔案或目錄;
-help或——help:線上幫助; -ilname:此參數的效果和指定「-lname」參數類似,但忽略字元大小寫的差異;
-iname:此參數的效果和指定“-name”參數類似,但忽略字元大小寫的差異;
-inum:找出符合指定的inode編號的檔案或目錄;
-ipath:此參數的效果和指定「-path”參數類似,但忽略字元大小寫的差異;
-iregex:此參數的效果和指定「-regexe」參數類似,但忽略字元大小寫的差異;
-links:尋找符合指定的硬連線數目的檔案或目錄;
-iname:指定字串為尋找符號連結的範本樣式;
-ls:假設find指令的回傳值為Ture,就將檔案或目錄名稱列出到標準輸出;
-maxdepth:設定最大目錄層級; -mindepth:設定最小目錄層級;
-mmin:尋找在指定時間曾經被更改過的檔案或目錄,單位以分鐘計算;
-mount:此參數的效果和指定「-xdev」相同;
-mtime:找出在指定時間曾經被更改過的檔案或目錄,單位以24小時計算;
-name:指定字串為尋找檔案或目錄的範本樣式;
-newer:找出其變更時間較指定檔案或目錄的變更時間更接近現在的檔案或目錄;
-nogroup:找出不屬於本地主機群組識別碼的檔案或目錄;
-noleaf:不去考慮目錄至少需擁有兩個硬連結存在;
- nouser:找出不屬於本機使用者識別碼的檔案或目錄;
-ok:此參數的效果和指定「-exec」類似,但在執行指令之前會先詢問用戶,若回答「 y”或“Y”,則放棄執行指令;
-path:指定字串為尋找目錄的範本樣式;
-perm:尋找符合指定的權限數值的檔案或目錄;
-print:假設find指令的回傳值為Ture,就將檔案或目錄名稱列出到標準輸出。格式為每列一個名稱,每個名稱前皆有「./」字串;
-print0:假設find指令的回傳值為Ture,就將檔案或目錄名稱列出到標準輸出。格式為全部的名稱皆在同一行;
-printf:假設find指令的回傳值為Ture,就將檔案或目錄名稱列出到標準輸出。格式可自行指定;
-prune:不尋找字串作為尋找檔案或目錄的範本樣式;
-regex:指定字串為尋找檔案或目錄的範本樣式;
-size:尋找符合指定的檔案大小的檔案;
-true:將find指令的回傳值皆設為True;
-typ:只尋找符合指定的檔案類型的檔案;
-uid:尋找符合指定的用戶識別碼的檔案或目錄;
-used:查找檔案或目錄被更改之後在指定時間曾被訪問過的檔案或目錄,單位以日計算;
-user:查找符和指定的擁有者名稱的檔案或目錄;
-version或-version:顯示版本資訊;
-xdev:將範圍侷限在先行的文件系統中;
-xtype:此參數的效果和指定「-type」參數類似,差異在於它針對符號連接檢查。
參數
起始目錄:尋找檔案的起始目錄。
實例
根據檔案或正規表示式進行比對
列出目前目錄及子目錄下所有檔案與資料夾
find .
在/home目錄下尋找以.
find .
在/home目錄下尋找以.
find .
在/home目錄下尋找以.3結尾的檔案名稱
/home -name "*.txt"
同上,但忽略大小寫
find . ( -name "*.txt" -o -name "*.pdf" )
或
find . -name "*.txt" -o -name "*.pdf"
符合檔案路徑或檔案
find /usr/ -path "*local*"
基於正規表示式符合檔案路徑
find . -regex ".*(.txt|.pdf)$"
同上,但忽略大小寫
find . -iregex ".*(.txt|.pdf)$"
否定參數
找出/home下不是以.txt結尾的檔案
find /home ! -name "*.txt"
接字
p Fifo 基於目錄深度搜尋
基於目錄深度搜尋
向下最大深度限制為3
find . -maxdepth 3 -type f
搜尋出深度距離目前目錄至少2個子目錄的所有檔案find . -mindepth 2 -type f
根據文件時間戳進行搜尋
find . -type f 時間戳
UNIX/Linux檔案系統每個檔案有三種時間戳記:
訪問時間( ,-amin/分鐘):
用戶最近一次造訪時間。
修改時間(-mtime/天,-mmin/分鐘):
檔案最後一次修改時間。
變更時間(-ctime/天,-cmin/分鐘):
檔案資料元(例如權限等)最後一次修改時間。
搜尋最近七天內被訪問過的所有文件
find . -type f -atime -7
搜尋恰好在七天前被訪問過的所有文件
find . -type f -atime 700 -atime所有七天內都被存取過的檔案
find . -type f -atime +7
搜尋存取時間超過10分鐘的所有檔案
find . -type f -amin +10
比找出修改所有時間較長的檔案
find . -type f -newer file.log
依照檔案大小配對
find . -type f -size
檔案大小單元檔案大小單元:
檔案大小單元:元( 512位元組)
c —— 位元組
w —— 字(2位元組)
k —— 千位元組
M —— 兆位元組
G
M —— 10KB的文件 find . -type f -size +10k 搜尋小於10KB的檔案 find . -type f -size -10k find . -type f -size -10k 等於10KB的文件 f刪除符合檔案
刪除目前目錄下所有.txt檔案
find . -type f -name "*.txt" -delete
根據檔案權限/權限進行配對
目前目錄下搜尋出文件
find . -type f -perm 777
找出目前目錄下權限不是644的php檔案
find . -type f -name "*.php" ! -perm 644
所有檔案
find . -type f -user tom
找出目前目錄使用者群組sunk擁有的所有檔案
find . -type f -group sunk
借助-exec選項與其他指令結合使用目錄目錄與其他指令下所有root的文件,並將所有權更改為用戶tom
find .-type f -user root
-exec chown tom {} ;
上例中,{} 用於與-exec選項結合使用來匹配所有文件,然後會被替換為相應的文件名稱。
找出自己家目錄下所有的.txt檔案並刪除
find $HOME/.
-name "*.txt"
-ok rm {} ;
上例中,-ok和-exec行為一樣,不過它會給予提示,是否執行對應的操作。
找出目前目錄下所有.txt檔案並把他們拼接起來寫入到all.txt檔案中
find . -type f -name "*.txt" -exec cat {} ;> all.txt
將30天前的.log檔案移到old目錄中
find . -type f -mtime +30 -name "*.log" -exec cp {} old ;
找出目前目錄下所有.txt檔案並以「File:檔名」的形式印出來
find . -type f -name "*.txt" -exec printf "File: %sn" {} ;
因為單行指令中-exec參數中無法使用多個命令,以下方法可以實現在
-exec之後接受多個命令
-exec ./text.sh {} ;
搜尋但跳出指定的目錄
查找當前目錄或子目錄下所有.txt文件,跳出指定的目錄
查找當前目錄或子目錄下所有.txt文件,跳出指定的目錄
查找當前目錄或子目錄下所有.txt文件,但跳過子目錄sk find .
-path "./sk" -prune -o -name "*.txt" -print find
其他技巧收集
要列出所有長度為零的檔案