find 指令算是Linux下最常用的一個指令之一了,這裡有一些常用用法的總結。
1. 依檔案名稱搜尋。
搜尋目前目錄下所有的以txt結尾的檔案。第二個指令用了 -exec 參數,可以在對所有尋找的檔案執行一種操作。注意格式,空格和;一個都不能少。 -name 的參數可以用正規表示式,例如第二個範例
find ./* -name "*.txt"
find ./* -name "[ab]*.py"
find ./* -name "*.pyc" -exec rm {} ;
2. 依修改時間找出
尋找當當天目錄下當天修改過的檔案。 -1 表示一天前修改過的文件。 -2表示前兩天。 find ./* -mtime n n表示,對檔案資料的最近一次修改是在 n*24 小時之前。 +n 指n天以前,-n指n天以內(對 -mmin 是指n分鐘), n 表示第n天,他們的意思都是不同的,注意區分。
find ./* -mtime 60 -type f -print
find ./* -mmin -60 -type f -print
find ./* -mmin +60 -type f -print
3. 檔案狀態改變和上個參數相比,基本道理都是一樣的,只不過這個參數的意思是檔案的權限被修改。改內容和改文件的權限是不一樣的,這裡指的是更改的是文件inode的數據,例如文件的權限,所屬人等等資訊。 cmin 表示近60分鐘內被改過權限,ctime 表示近幾天內被修改過。
find ./* -ctime -60 -type f -print
依照文件的所屬group和所屬user 來找出-user 和-nouser4
依照文件的所屬group和所屬user 來找出-user 和-nouser 最後一個指令找出目前已刪除的系統使用者的所有文件, - group 和- nogroup 的功能類似。
find ./* -user fox
find ./* -nouser
5
find 避開某目錄,避開多個目錄。其中 -a 表示 and 的意思,-o 表示or 的意思。
find test -path "test/test4" -prune -o -print
find test ( -path test/test4 -o -path test/test3 ) -prune -o -print
find . ( -path o -path ./framework -o -path ./utils -o -path ./config ) -prune -o -name "Bigger.*" -print
6
-perm 選項指檔案的存取權限
find - perm 755 -print
7
實用inode 來找出檔案編號。可以如下面所示在find指令中指定inode編號。在此,find指令用inode編號重新命名了一個檔案。你也可以透過rm來刪除那個特殊的檔案。
ls -i1 test*
16187429 test-file-name
16187430 test-file-name
find -inum 16187430 -exec mv {) new-test-file-name ; 5個檔案
find . -type f -exec ls -s {} ; | sort -n -r | head -5
下面的指令刪除大於100M的*.zip檔。
find / -type f -name *.zip -size +100M -exec rm -i {} ;