2008-12-18

find 指令進階用法 [Linux]

find 指令結構
find [path] [expression]
[path]啟始路徑
[expression]查詢參數

基本參數
-name 以指定的範本搜尋檔案名稱
-iname 同上,但不區分大小寫
find . -name 'a*.jpg'
在當前目錄下搜尋開頭為 a 的圖片檔案

-path 以指定的範本搜尋檔案路徑
-ipath 同上,但不區分大小寫
find . -path '*pics/*pic_*.jpg'
在當前目錄下搜尋 ./pics/pic_01.jpg, ./01/pics/pic_a1.jpg, ./02/pics/01/pic_aa.jpg 這些檔案

-regex 以正規表示式搜尋檔案路徑
-iregex 同上,但不區分大小寫
find . -regex '.*pic_[0-9]+\.jpg'
在當前目錄下搜尋 pic_01.jpg, pic_03.jpg, pic_03.jpg 這些檔案

-type 搜尋檔案類型:一般檔案 (f),裝置檔案 (b,c),目錄(d),連結檔(l),socket(s),FIFO(p)
find . -type l
在當前目錄下搜尋所有連結檔

-size 搜尋檔案大小:byte(c),Kilobytes(k),Megabytes(M),Gigabytes(G)
find . -size 3k
在當前目錄下搜尋大小為(3kb)的檔案

find . -size +3k
在當前目錄下搜尋大於(3kb)的檔案

find . -size -3k
在當前目錄下搜尋小於(3kb)的檔案


時間參數
-mtime 搜尋檔案的修改時間(天)
-mmin 同上,以分鐘為單位
-ctime 搜尋檔案的建立時間
-cmin 同上,以分鐘為單位
-atime 搜尋檔案的最後開啟時間
-amin 同上,以分鐘為單位
find . -mtime 3
在當前目錄下搜尋3天時修改的檔案

find . -mtime +3
在當前目錄下搜尋3天前修改的檔案

find . -mtime -3
在當前目錄下搜尋3天內修改的檔案


帳戶參數
-user 搜尋指定帳戶名稱的檔案
-nouser 同上,但是搜尋非帳戶名稱的檔案(-not -user)
find . -user ftp
在當前目錄下搜尋使用者名稱為(ftp)的檔案

find . -nouser ftp
在當前目錄下搜尋使用者名稱非(ftp)的檔案

-group 搜尋指定群組名稱的檔案
-nogroup 同上,但是搜尋非群組名稱的檔案(-not -group)
find . -group ftp
在當前目錄下搜尋群組名稱為(ftp)的檔案

find . -nogroup ftp
在當前目錄下搜尋群組名稱非(ftp)的檔案

-perm 搜尋指定的檔案權限
find . -perm 744
在當前目錄下搜尋檔案權限為(744)的檔案

find . -perm +744
在當前目錄下搜尋檔案權限小於(744)的檔案,(600,444)

find . -perm -744
在當前目錄下搜尋檔案權限大於(744)的檔案,(744,774)

如果上面的指令你都會了,來點特別的吧!

邏輯處理
() 將搜尋條件優先處理,在使用上記得用'\'跳脫
-not 將搜尋條件反相
! 同上,在使用上記得用'\'跳脫
-and 邏輯的(和)
-a 同上
-or 邏輯的(或)
-o 同上

find . \(-user ftp -perm 744\) -or \(-group ftp\)
在當前目錄下搜尋
使用者名稱為(ftp)且權限為(744)的檔案

群組名稱為(ftp)的檔案

其他
-delete 將搜尋出來的檔案刪除
find . -user ftp -delete
刪除使用者名稱為(ftp)的檔案

-printf 將搜尋出來的結果以自訂格式輸出
find . -printf '%p\n'

-fprintf 將搜尋出來的結果以自訂格式輸出至文件
find . -fprintf a.txt '%p\n'

參考來源:
find - Linux Command - Unix Command

2 回應:

要常祈禱,不要灰心。 提到...

你要多弄些例題出來,別人也可以引用

Jax 提到...

有時間我會將這篇文章寫完整一點
謝謝您的意見