linux find 命令查詢檔案和資料夾

2021-09-08 20:22:29 字數 4976 閱讀 3504

查詢目錄:find /(查詢範圍) -name '查詢關鍵字' -type d

查詢檔案:find /(查詢範圍) -name 查詢關鍵字 -print

詳解:find命令用來在指定目錄下查詢檔案。任何位於引數之前的字串都將被視為欲查詢的目錄名。如果使用該命令時,不設定任何引數,則find命令將在當前目錄下查詢子目錄與檔案。並且將查詢到的子目錄和檔案全部進行顯示。

find(選項)(引數)
-amin《分鐘》:查詢在指定時間曾被訪問過的檔案或目錄,單位以分鐘計算;

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

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

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

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

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

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

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

-exec

《執行指令》:假設find指令的回傳值為true,就執行該指令;

-false:將find指令的回傳值皆設為false;

-fls《列表檔案》:此引數的效果和指定「-ls」引數類似,但會把結果儲存為指定的列表檔案;

-follow:排除符號連線;

-fprint《列表檔案》:此引數的效果和指定「-print」引數類似,但會把結果儲存成指定的列表檔案;

-fprint0《列表檔案》:此引數的效果和指定「-print0」引數類似,但會把結果儲存成指定的列表檔案;

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

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

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

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

-ilname《範本樣式》:此引數的效果和指定「-lname」引數類似,但忽略字元大小寫的差別;

-iname《範本樣式》:此引數的效果和指定「-name」引數類似,但忽略字元大小寫的差別;

-inummount:此引數的效果和指定「-xdev」相同;

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

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

-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目錄下查詢以.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 型別引數
型別引數列表:

基於目錄深度搜尋

向下最大深度限制為3

find . -maxdepth 3 -type f
搜尋出深度距離當前目錄至少2個子目錄的所有檔案

find . -mindepth 2 -type f
根據檔案時間戳進行搜尋
find . -type f 時間戳
unix/linux檔案系統每個檔案都有三種時間戳:

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

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 檔案大小單元
檔案大小單元:

搜尋大於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

Linux find 查詢檔案

在日誌資料夾下判斷是否有web伺服器的日誌資料夾,寫了個指令碼 bin bash cd wls annuity acc for sys in cat wiiserver name list.txt do find logs sys name sys xargs echo en n 123.txt f...

linux find 查詢檔案

1.根據名稱查詢某個目錄下的檔案 目錄 例子 查詢根目錄下的檔案名字為a.txt find name a.txt 2.根據名稱查詢某個目錄下型別為檔案的a.txt type f 檔案 d 目錄 find name a.txt type f 3.查詢某目錄下大小為在某個範圍的檔案 例子 查詢hive目...

linux find 命令查詢檔案和資料夾

查詢目錄 find 查詢範圍 name 查詢關鍵字 type d 查詢檔案 find 查詢範圍 name 查詢關鍵字 print 詳解 find命令用來在指定目錄下查詢檔案。任何位於引數之前的字串都將被視為欲查詢的目錄名。如果使用該命令時,不設定任何引數,則find命令將在當前目錄下查詢子目錄與檔案...