1. 程式人生 > >linux-find【遞迴搜尋檔名】

linux-find【遞迴搜尋檔名】

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
#find  /tmp -gid 1000      // 查詢gid是1000的檔案
[4]-a,-o,-not的使用
-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