1. 程式人生 > >Linux下find命令---檔案的查詢和比較

Linux下find命令---檔案的查詢和比較

find命令的引數;

pathn:   find命令所查詢的目錄路徑。例如用.來表示當前目錄,用/來表示系統根目錄。
-print: find命令將匹配的檔案輸出到標準輸出。
-exec: find命令對匹配的檔案執行該引數所給出的shell命令。相應命令的形式為'command' { } \;,注意{ }和\;之間的空格。
find命令的選項:

-amin<分鐘>:查詢在指定時間曾被存取過的檔案或目錄,單位以分鐘計算; 

-cmin<分鐘>:查詢在指定時間之時被更改過的檔案或目錄; 

-mmin<分鐘>:查詢在指定時間曾被更改過的檔案或目錄,單位以分鐘計算;

-atime<24小時數>:查詢在指定時間曾被存取過的檔案或目錄,單位以24小時計算;

-ctime<24小時數>:查詢在指定時間之時被更改的檔案或目錄,單位以24小時計算; 

-mtime<24小時數>:查詢在指定時間曾被更改過的檔案或目錄,單位以24小時計算; 

-anewer<參考檔案或目錄>:查詢其存取時間較指定檔案或目錄的存取時間更接近現在的檔案或目錄;

-cnewer<參考檔案或目錄>查詢其更改時間較指定檔案或目錄的更改時間更接近現在的檔案或目錄; 

-newer<參考檔案或目錄>:查詢其更改時間較指定檔案或目錄的更改時間更接近現在的檔案或目錄;


-used<日數>:查詢檔案或目錄被更改之後在指定時間曾被存取過的檔案或目錄,單位以日計算; 

-daystart:從本日開始計算時間; 

-depth:從指定目錄下最深層的子目錄開始查詢; 

-maxdepth<目錄層級>:設定最大目錄層級; 

-mindepth<目錄層級>:設定最小目錄層級; 

-expty:尋找檔案大小為0 Byte的檔案,或目錄下沒有任何子目錄或檔案的空目錄; 

 -fls<列表檔案>:此引數的效果和指定“-ls”引數類似,但會把結果儲存為指定的列表檔案; 

-follow:排除符號連線; -fprint<列表檔案>:此引數的效果和指定“-print”引數類似,但會把結果儲存成指定的列表檔案; 

-fprint0<列表檔案>:此引數的效果和指定“-print0”引數類似,但會把結果儲存成指定的列表檔案; 

-fprintf<列表檔案><輸出格式>:此引數的效果和指定“-printf”引數類似,但會把結果儲存成指定的列表檔案; 

-fstype<檔案系統型別>:只尋找該檔案系統型別下的檔案或目錄; 

-gid<群組識別碼>:查詢符合指定之群組識別碼的檔案或目錄; 

-group<群組名稱>:查詢符合指定之群組名稱的檔案或目錄; 

-help或——help:線上幫助; -ilname<範本樣式>:此引數的效果和指定“-lname”引數類似,但忽略字元大小寫的差別; 

-inum:查詢符合指定的inode編號的檔案或目錄; 

-ipath<範本樣式>:此引數的效果和指定“-path”引數類似,但忽略字元大小寫的差別; 

-iregex<範本樣式>:此引數的效果和指定“-regexe”引數類似,但忽略字元大小寫的差別; 

-regex<範本樣式>:指定字串作為尋找檔案或目錄的範本樣式; 

-links<連線數目>:查詢符合指定的硬連線數目的檔案或目錄; 

-iname<範本樣式>:指定字串作為尋找符號連線的範本樣式;

 -ls:假設find指令的回傳值為Ture,就將檔案或目錄名稱列出到標準輸出; 

 -mount:此引數的效果和指定“-xdev”相同; 

-iname<範本樣式>:此引數的效果和指定“-name”引數類似,但忽略字元大小寫的差別; 

-name<範本樣式>:指定字串作為尋找檔案或目錄的範本樣式; 

-nogroup:找出不屬於本地主機群組識別碼的檔案或目錄; 

-noleaf:不去考慮目錄至少需擁有兩個硬連線存在; 

-nouser:找出不屬於本地主機使用者識別碼的檔案或目錄; 

-ok<執行指令>:此引數的效果和指定“-exec”類似,但在執行指令之前會先詢問使用者,若回答“y”或“Y”,則放棄執行命令; 

-exec<執行指令>:假設find指令的回傳值為True,就執行該指令; -false:將find指令的回傳值皆設為False;

-path<範本樣式>:指定字串作為尋找目錄的範本樣式; 

-perm<許可權數值>:查詢符合指定的許可權數值的檔案或目錄;

 -print:假設find指令的回傳值為Ture,就將檔案或目錄名稱列出到標準輸出。格式為每列一個名稱,每個名稱前皆有“./”字串;

 -print0:假設find指令的回傳值為Ture,就將檔案或目錄名稱列出到標準輸出。格式為全部的名稱皆在同一行; 

-printf<輸出格式>:假設find指令的回傳值為Ture,就將檔案或目錄名稱列出到標準輸出。格式可以自行指定; 

-prune:不尋找字串作為尋找檔案或目錄的範本樣式; 

-size<檔案大小>:查詢符合指定的檔案大小的檔案; -true:將find指令的回傳值皆設為True;

 -type<檔案型別>:只尋找符合指定的檔案型別的檔案; 

 -xtype<檔案型別>:此引數的效果和指定“-type”引數類似,差別在於它針對符號連線檢查。

-uid<使用者識別碼>:查詢符合指定的使用者識別碼的檔案或目錄; 

-user<擁有者名稱>:查詢符和指定的擁有者名稱的檔案或目錄; 

 -xdev:將範圍侷限在先行的檔案系統中;

根據檔案或正則表示式進行匹配

列出當前目錄及子目錄下所有檔案和資料夾

 find . 

在/home目錄下查詢以.txt結尾的檔名

 find /home -name "*.txt" 

同上,但忽略大小寫

 find /home -iname "*.txt" 

當前目錄及子目錄下查詢所有以.txt和.pdf結尾的檔案

 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" 

根據檔案型別進行搜尋

 find . -type 型別引數 

型別引數列表: f 普通檔案 l 符號連線 d 目錄 c 字元裝置 b 塊裝置 s 套接字 p Fifo 

基於目錄深度搜索 

向下最大深度限制為3

 find . -maxdepth 3 -type f 

搜尋出深度距離當前目錄至少2個子目錄的所有檔案

 find . -mindepth 2 -type f

 根據檔案時間戳進行搜尋

 find . -type f 時間戳

 UNIX/Linux檔案系統每個檔案都有三種時間戳: 訪問時間(-atime/天,-amin/分鐘):使用者最近一次訪問時間。 修改時間(-mtime/天,-mmin/分鐘):檔案最後一次修改時間。 變化時間(-ctime/天,-cmin/分鐘):檔案資料元(例如許可權等)最後一次修改時間。 

搜尋最近七天內被訪問過的所有檔案 

find . -type f -atime -7 

搜尋恰好在七天前被訪問過的所有檔案

 find . -type f -atime 7

 搜尋超過七天內被訪問過的所有檔案

 find . -type f -atime +7 

搜尋訪問時間超過10分鐘的所有檔案

 find . -type f -amin +10 

找出比file.log修改時間更長的所有檔案

 find . -type f -newer file.log 

根據檔案大小進行匹配

 find . -type f -size 檔案大小單元 檔案大小單元: b —— 塊(512位元組) c —— 位元組 w —— 字(2位元組) k —— 千位元組 M —— 兆位元組 G —— 吉位元組 

搜尋大於10KB的檔案

 find . -type f -size +10k 

搜尋小於10KB的檔案

 find . -type f -size -10k 

搜尋等於10KB的檔案

 find . -type f -size 10k 

刪除匹配檔案

 刪除當前目錄下所有.txt檔案

 find . -type f -name "*.txt" -delete 

根據檔案許可權/所有權進行匹配

 當前目錄下搜尋出許可權為777的檔案

 find . -type f -perm 777

 找出當前目錄下許可權不是644的php檔案

 find . -type f -name "*.php" ! -perm 644 

找出當前目錄使用者tom擁有的所有檔案 

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: %s\n" {} \;

 因為單行命令中-exec引數中無法使用多個命令,以下方法可以實現在-exec之後接受多條命令 -exec ./text.sh {} \; 

搜尋但跳出指定的目錄 查詢當前目錄或者子目錄下所有.txt檔案,但是跳過子目錄sk

 find . -path "./sk" -prune -o -name "*.txt" -print find

其他技巧收集 

要列出所有長度為零的檔案 

find . -empty


轉載於http://man.linuxde.net/find