Linux find命令解析

2022-09-23 00:33:12 字數 4990 閱讀 6518

命令功能:

在目錄結構中搜尋檔案,並執行指定的操作。

語法:find 路徑 -選項 引數

findpathname-options[-print-exec-ok...]

可以通俗理解為:find [查詢路徑] 尋找條件 操作。

選項選項 詳細說明 舉例

-name 匹配名稱

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

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

-user 匹配所有者

-group 匹配所有組

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

-nouser 匹配不是所有者的檔案

-nogroup 匹配不是所有組的檔案

-mmin -n,n,+n 匹配修改內容的時間(-n指n分鐘以內,+n指n分鐘以前)

-amin -n,n,+n 匹配訪問檔案的時間-n指n分鐘以內,+n指n分鐘以前

-cmin -n,n,+n 匹配修改許可權的時間-n指n分鐘以內,+n指n分鐘以前

-mtime -n,n,+n 匹配修改內容的時間(-n指n天以內,+n指n天以前)

-atime -n,n,+n 匹配訪問檔案的時間-n指n天以內,+n指n天以前

-ctime -n,n,+n 匹配修改許可權的時間-n指n天以內,+n指n天以前

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

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

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

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

-perm 匹配許可權(mode為完全匹配,-mode為包含即可)

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

-newer f1 !f2 匹配比檔案f1新卻比f2舊的檔案

--size 匹配檔案的大小(+50k查詢超過50k的檔案,而-50k則代表查詢小於50k的檔案)

-empty 尋找檔案大小為0 byte的檔案,或空目錄;

-prune 忽略某個目錄

--type b/d/c/p/l/f/s 匹配檔案型別(塊裝置、目錄、字元裝置、管道、符號鏈結、檔案檔案、套接字)

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

-maxdepth 目錄層級》 設定最大目錄層級;

-mindepth 目錄層級》 設定最小目錄層級;

-iname 匹配名稱(但忽略大小寫)

find /home ! -name "*.txt" 找出/home下不是以.txt結尾的檔案

-o 或;滿足乙個條件就算;

-follow 排除符號連線;

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

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

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

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

引數引數 詳細說明 舉例

-print find命令將匹配的檔案輸出到標準輸出。

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

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

--exec 執行指令》 假設find指令的回傳值為true,就執行該指令;後面可接對搜尋到結果進一步處理的命令

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

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

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

說明:{} 用於與-exec選項結合使用來匹配所有檔案,然後會被替換為相應的檔名。{}與\之間有空格

舉例 1 與時間有關的選項:

訪問時間(-atime/天,-amin/分鐘):使用者最近一次訪問時間。 修改時間(-mtime/天,-mmin/分鐘):檔案最後一次修改時間。 變化時間(-ctime/天,-cmin/分鐘):檔案資料元(例如許可權等)最後一次修改時間。-mtime n :n 為數字,第n天更改過內容的檔案; -mtime +n : n 天之前(不含 n 天)被更動內容的檔案檔名; -mtime -n : n 天之內(含 n 天本身)被更動內容的檔案檔名。 -newer file :file 為乙個已經存在的檔案,列出比 file 還要新的檔案檔名 ;對比;找出比file.log修改時間更長的所有檔案 find . -type f -newer file.log範例一:將過去系統上面 24 小時內有更改過內容 (mtime) 的檔案列出

$ find / -mtime 0

#那個 0 是重點!0 代表目前的時間,所以,從現在開始到 24 小時前, #有變東過內容的檔案都會被列出來!那如果是三天前的 24 小時內? #find / -mtime 3 有變動過的檔案都被列出的意思!

範例二:尋找 /etc 底下的檔案,如果檔案日期比 /etc/passwd 新就列出

$ find /etc -newer /etc/passwd

-newer 用在分辨兩個檔案之間的新舊關係是很有用的!

+4 代表大於等於 5 天前的檔名:ex> find /var -mtime +4 -4 代表小於等於 4 天內的檔案檔名:ex> find /var -mtime -4 4 則是代表 4-5 那一天的檔案檔名:ex> find /var -mtime 4

2 按檔名查詢

-name:按名稱查詢;

find /home -name "*.txt"

find /home -iname "*.txt" -i忽略大小寫

find . -name "*.txt" -o -name "*.pdf" 或 find . \( -name "*.txt" -o -name "*.pdf" \)

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

3 按檔案型別:

-type: 按檔案型別查詢;f 普通檔案 d 目錄

$ find ./ -type f

$ find ./ -type d

4 基於目錄深度搜尋

-maxdepth目錄層級》:設定最大目錄層級;-mindepth目錄層級》:設定最小目錄層級;搜尋出深度距離當前目錄至少2個子目錄的所有檔案

$ find . -mindepth 2 -type f

5 檔案大小單元:

-size:大小b —— 塊(512位元組) c —— 位元組 w —— 字(2位元組) k —— 千位元組 m —— 兆位元組 g —— 吉位元組搜尋大於10kb的檔案

$ find . -type f -size +10k

6 刪除匹配檔案

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

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

7 根據檔案許可權修改

-perm :許可權 -user :擁有者-group :使用者組 找出當前目錄下許可權不是644的php檔案

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

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

$ find . -type f -user tom

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

$ find . -type f -group sunk

8 搜尋但跳出指定的目錄

-prune查詢當前目錄或者子目錄下所有.txt檔案,但是跳過子目錄sk

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

9 借助-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 {} \;

10 應用

find ./ -type f -name '*.log.201*' -mtime +20 |xargs rm -f 刪除(檔案型別:檔案;;名字是 *.log.201*一類的;;時間是20天前的);

find ./ -maxdepth 2 -type d -name "201*" -mtime +20

-maxdepth 2 查詢深度 為 2;;檔案型別為目錄;

找出使用者linuxprobe的檔案並複製到/root/findresults目錄。重點是」-exec {} \;」其中的{}代表find命令搜尋出的檔案,記住結尾必須是\;

find / -user linuxprobe -exec cp -arf {} /root/findresults/ \;

linux find命令應用

功能說明 查詢檔案或目錄 語法 find 目錄.amin 分鐘 anewer 參考檔案或目錄 atime 24小時數 cmin 分鐘 cnewer 參考檔案或目錄 ctime 24小時數 daystart depyh empty exec 執行指令 false fls 列表檔案 follow fpr...

Linux find命令小結

find 命令 今天瀏覽了下linux下find 的man文件,涉及的細節很多,僅把常用的部分整理出來,供後續豐富補充吧。find命令格式 usage find path expression path預設為當前路徑,expression預設為 print項 expressions有以下幾種組成 o...

linux find命令記錄

find amin 10 查詢在系統中最後10分鐘訪問的檔案 find atime 2 查詢在系統中最後48小時訪問的檔案 find mmin 5 查詢在系統中最後5分鐘裡修改過的檔案 find mtime 1 查詢在系統中最後24小時裡修改過的檔案 find cmin 5 查詢在系統中最後5分鐘裡...