linux-find【遞迴搜尋檔名】
阿新 • • 發佈:2019-01-08
1 命令格式:
$ find <指定目錄> <指定條件> <指定動作>
最常見示例:查詢檔名(忽略大小寫)
$find . -iname sqlquery.java
1.1 <指定目錄>:
所要搜尋的目錄及其所有子目錄。預設為當前目錄。find預設遞迴指定目錄。目錄可以有多個,目錄之間要用空格分開。
[[email protected]]$find /etc /tmp /root -name passwd
1.2 <指定條件>:
所要搜尋的檔案的特徵。
[1]根據檔名查詢
-name 按照檔名查詢
-iname
-prune 不在當前指定的目錄中查詢
-depth 在查詢檔案時,首先查詢當前目錄中的檔案,然後再在其子目錄中查詢
[2]根據檔案所屬使用者和組來查詢檔案
-user 按照檔案屬主來查詢檔案
$find / -user fred //查詢在系統中屬於FRED這個使用者的檔案
-group 按照檔案所屬的組來查詢檔案
$find / -group cat //查詢在系統中屬於group組名cat的檔案
[3]根據uid 和 gid來查詢使用者-uid
#find /tmp -uid 500 //查詢uid是500 的檔案
-gid[4]-a,-o,-not的使用#find /tmp -gid 1000 // 查詢gid是1000的檔案
-a 連線兩個不同的條件(兩個條件必須同時滿足)
#find /tmp -name "*.sh" -a -user root
-o 連線兩個不同的條件(兩個條件滿足其一即可)#find /tmp -name "*.sh" -o -user root
-not 對條件取反的#find /tmp -not -user root
[5]根據檔案時間戳的相關屬性來查詢檔案-atime 最近一次訪問時間 單位:天
-mtime 最近一次內容修改時間 單位:天
-ctime 最近一次屬性修改時間 單位:天
-amin 最近一次訪問時間 單位:分鐘
-mmin
-cmin 最近一次屬性修改時間 單位:分鐘
-newer file1 ! file2 查詢更改時間比檔案file1新但比檔案file2舊的檔案
#find /tmp -atime +5 //表示查詢在五天內沒有訪問過的檔案
#find /tmp -atime -5 //表示查詢在五天內訪問過的檔案
[6]根據檔案型別來查詢檔案-type 查詢某一型別的檔案
檔案型別:
f 普通檔案
d 目錄
l 符號連結檔案
c 字元裝置檔案
p 管道檔案
b 塊裝置檔案
s socket檔案
#find /tmp -type s
[7]根據大小來查詢檔案-size n[c] 查詢檔案長度為n塊的檔案,帶有c時表示檔案長度以位元組計
#find /tmp -size 2M //查詢在/tmp 目錄下等於2M的檔案
#find /tmp -size +2M //查詢在/tmp 目錄下大於2M的檔案
#find /tmp -size -2M //查詢在/tmp 目錄下小於2M的檔案
$find . -size +1000000c //在當前目錄下查詢檔案長度大於1 M位元組的檔案
$find / -empty //查詢在系統中為空的檔案或者資料夾
[8]根據檔案許可權查詢檔案
-perm#find /tmp -perm 755 //查詢在/tmp目錄下許可權是755的檔案
#find /tmp -perm +222 //表示只要有一類使用者(屬主,屬組,其他)的匹配寫許可權就行
#find /tmp -perm -222 //表示必須所有類別使用者都滿足有寫許可權
[10]-nouser和-nogroup-nogroup 查詢無有效所屬組的檔案,即該檔案所屬的組不存在
-nouser 查詢無有效屬主的檔案
#find / -nogroup -a -nouser //在整個系統中查詢既沒有屬主又沒有屬組的檔案(這樣的檔案通常是很危險的,作為系統工程師的我們應該及時清除掉)
$find / -nouser //查詢在系統中屬於作廢使用者的檔案
1.3 <指定動作>:
對搜尋結果進行特定的處理。
-print //預設情況下的動作
-ls //查詢到後用ls 顯示出來
-ok [commend] //查詢後執行命令的時候詢問使用者是否要執行
-exec [commend] //查詢後執行命令的時候不詢問使用者,直接執行
注意-ok和-exec命令將命令列上後續的引數作為他們引數的一部分,直到被\;序列終止。魔術字串{}是-ok和-exec命令的一個特殊型別的引數,它將被當前檔案的完整路徑取代。
#find /tmp -atime +30 –exec rm –rf {} \; //刪除查詢到的超過30天沒有訪問過檔案
這裡要注意{ }的使用:替代查詢到的檔案#find /tmp -name "*.old" | xargs chmod 700
2 命令舉例
搜尋/etc目錄下的檔名包含del的檔案。
$find /etc -name '*del*'
系統查詢到"config.py"檔案後即時在螢幕上顯示"config.py"檔案資訊。
$find . -name "config.py" -ls
搜尋當前目錄中,所有過去10分鐘中更新過的普通檔案。如果不加-type f引數,則搜尋普通檔案+特殊檔案+目錄。$ find . -type f -mmin -10