【Linux】史上最全的Find命令
Find
功能說明:查詢檔案或目錄。
語 法:find (-$)
參 數 && 說 明:
[目錄...] [-amin <分鐘>] 查詢在指定時間曾被存取過的檔案或目錄,單位以分鐘計算 [-anewer <參考檔案或目錄>] 查詢其存取時間較指定檔案或目錄的存取時間更接近現在的檔案或目錄 [-atime <24小時數>] 查詢在指定時間曾被存取過的檔案或目錄,單位以24小時計算 [-cmin <分鐘>] 查詢在指定時間之時被更改的檔案或目錄 [-cnewer <參考檔案或目錄>] 查詢其更改時間較指定檔案或目錄的更改時間更接近現在的檔案或目錄 [-ctime <24小時數>] 查詢在指定時間之時被更改的檔案或目錄,單位以24小時計 [-daystart] 從本日開始計算時間 [-depyh] 從指定目錄下最深層的子目錄開始查詢 [-empty] 尋找檔案大小為0 Byte的檔案,或目錄下沒有任何子目錄或檔案的空目錄 [-exec <執行指令>] 假設find指令的回傳值為True,就執行該指令 [-false] 將find指令的回傳值皆設為False [-fls <列表檔案>] 此引數的效果和指定"-ls"引數類似,但會把結果儲存為指定的列表檔案 [-follow] 排除符號連線 [-fprint <列表檔案>] 此引數的效果和指定"-print"引數類似,但會把結果儲存成指定的列表檔案 [-fprint0 <列表檔案>] 此引數的效果和指定"-print0"引數類似,但會把結果儲存成指定的列表檔案 [-fprintf <列表檔案><輸出格式>] 此引數的效果和指定"-printf"引數類似,但會把結果儲存成指定的列表檔案 [-fstype <檔案系統型別>] 只尋找該檔案系統型別下的檔案或目錄 [-gid <群組識別碼>] 查詢符合指定之群組識別碼的檔案或目錄 [-group <群組名稱>] 查詢符合指定之群組名稱的檔案或目錄 [-help] 線上幫助 [-ilname <範本樣式>] 此引數的效果和指定"-lname"引數類似,但忽略字元大小寫的差別 [-iname <範本樣式>] 此引數的效果和指定"-name"引數類似,但忽略字元大小寫的差別 [-inum <inode編號>] 查詢符合指定的inode編號的檔案或目錄 [-ipath <範本樣式>] 此引數的效果和指定"-ipath"引數類似,但忽略字元大小寫的差別 [-iregex <範本樣式>] 此引數的效果和指定"-regexe"引數類似,但忽略字元大小寫的差別 [-links <連線數目>] 查詢符合指定的硬連線數目的檔案或目錄 [-lname <範本樣式>] 指定字串作為尋找符號連線的範本樣式 [-ls] 假設find指令的回傳值為True,就將檔案或目錄名稱列出到標準輸出 [-maxdepth <目錄層級>] 設定最大目錄層級 [-mindepth <目錄層級>] 設定最小目錄層級 [-mmin <分鐘>] 查詢在指定時間曾被更改過的檔案或目錄,單位以分鐘計算 [-mount] 此引數的效果和指定"-xdev"相同 [-mtime <24小時數>] 查詢在指定時間曾被更改過的檔案或目錄,單位以24小時計算 [-name <範本樣式>] 指定字串作為尋找檔案或目錄的範本樣式 [-newer <參考檔案或目錄>] 查詢其更改時間較指定檔案或目錄的更改時間更接近現在的檔案或目錄 [-nogroup] 找出不屬於本地主機群組識別碼的檔案或目錄 [noleaf] 不去考慮目錄至少需擁有兩個硬連線存在 [-nouser] 找出不屬於本地主機使用者識別碼的檔案或目錄 [-ok <執行指令>] 此引數的效果和指定"-exec"引數類似,但在執行指令之前會先詢問使用者,若回答"y"或"Y",則放棄執行指令 [-path <範本樣式>] 指定字串作為尋找目錄的範本樣式 [-perm <許可權數值>] 查詢符合指定的許可權數值的檔案或目錄 [-print] 假設find指令的回傳值為True,就將檔案或目錄名稱列出到標準輸出。格式為每列一個名稱,每個名稱之前皆有"./"字串 [-print0] 假設find指令的回傳值為True,就將檔案或目錄名稱列出到標準輸出。格式為全部的名稱皆在同一行 [-printf <輸出格式>] 假設find指令的回傳值為True,就將檔案或目錄名稱列出到標準輸出。格式可以自行指定 [-prune] 不尋找字串作為尋找檔案或目錄的範本樣式 [-regex <範本樣式>] 指定字串作為尋找檔案或目錄的範本樣式 [-size <檔案大小>] 查詢符合指定的檔案大小的檔案 [-true] 將find指令的回傳值皆設為True [-type <檔案型別>] 只尋找符合指定的檔案型別的檔案 [-uid <使用者識別碼>] 查詢符合指定的使用者識別碼的檔案或目錄 [-used <日數>] 查詢檔案或目錄被更改之後在指定時間曾被存取過的檔案或目錄,單位以日計算 [-user <擁有者名稱>] 查詢符合指定的擁有者名稱的檔案或目錄 [-version] 顯示版本資訊 [-xdev] 將範圍侷限在先行的檔案系統中 [-xtype <檔案型別>] 此引數的效果和指定"-type"引數類似,差別在於它針對符號連線檢查
補充說明:find指令用於查詢符合條件的檔案。任何位於引數之前的字串都將被視為欲查詢的目錄。
示例
(1)查詢48小時內修改過的檔案
find -atime -2
(2)在當前目錄查詢 以.log結尾的檔案。 ". "代表當前目錄
find ./ -name '*.log'
(3)查詢/opt目錄下 許可權為 777的檔案
find /opt -perm 777
(4)查詢大於1K的檔案
find -size +1000c
find -size 1000c 查詢等於1000字元的檔案
`-exec 引數後面跟的是command命令,它的終止是以;為結束標誌的,所以這句命令後面的分號是不可缺少的,考慮到各個系統中分號會有不同的意義,所以前面加反斜槓。{} 花括號代表前面find查找出來的檔名。`
(5)在當前目錄中查詢更改時間在10日以前的檔案並刪除它們(無提醒)
find . -type f -mtime +10 -exec rm -f {} ;
(6)當前目錄中查詢所有檔名以.log結尾、更改時間在5日以上的檔案,並刪除它們,只不過在刪除之前先給出提示。 按y鍵刪除檔案,按n鍵不刪除
find . -name '*.log' mtime +5 -ok -exec rm {} ;
(7)當前目錄下查詢檔名以passwd開頭,內容包含"pkg"字元的檔案
find . -f -name 'passwd*' -exec grep "pkg" {} ;
(8)用exec選項執行cp命令
find . -name '*.log' -exec cp {} test3 ;
`-xargs find命令把匹配到的檔案傳遞給xargs命令,而xargs命令每次只獲取一部分檔案而不是全部,不像-exec選項那樣。這樣它可以先處理最先獲取的一部分檔案,然後是下一批,並如此繼續下去。`
(9)查詢當前目錄下每個普通檔案,然後使用xargs來判斷檔案型別
find . -type f -print | xargs file
(10)查詢當前目錄下所有以js結尾的並且其中包含'editor'字元的普通檔案
find . -type f -name "*.js" -exec grep -lF 'ueditor' {} ;
find -type f -name '*.js' | xargs grep -lF 'editor'
(11)利用xargs執行mv命令
find . -name "*.log" | xargs -i mv {} test4
(12)用grep命令在當前目錄下的所有普通檔案中搜索hostnames這個詞,並標出所在行
find . -name *(轉義) -type f -print | xargs grep -n 'hostnames'
(13)查詢當前目錄中以一個小寫字母開頭,最後是4到9加上.log結束的檔案
find . -name '[a-z]*[4-9].log' -print
(14)在test目錄查詢不在test4子目錄查詢
find test -path 'test/test4' -prune -o -print
(15)例項1:查詢更改時間比檔案log2012.log新但比檔案log2017.log舊的檔案
find -newer log2012.log ! -newer log2017.log
使用depth選項:
depth選項可以使find命令向磁帶上備份檔案系統時,希望首先備份所有的檔案,其次再備份子目錄中的檔案。
例項:
find命令從檔案系統的根目錄開始,查詢一個名為CON.FILE的檔案。 它將首先匹配所有的檔案然後再進入子目錄中查詢
find / -name "CON.FILE" -depth