👨‍💻簡介

  • find
  • 用途:在目錄中找尋文件

語法

find path [OPTIONS]

參數(常用)

參數說明
-mount, -xdev只檢查和指定目錄在同一個文件系統下的文件,避免列出其它文件系統中的文件
-amin n指定檔案的最後存取時間,單位為分鐘,在過去n分鐘內被存取過
-anewer file比文件file更晚被存取過的文件
-atime n指定檔案的最後存取時間(access time),單位為天
-cmin n指定檔案狀態相關資訊最後修改的時間,單位為分鐘
-cnewer file比文件file更新的文件
-ctime n指定檔案狀態相關資訊最後修改的時間(status time),單位為天
-mtime n指定檔案的最後修改時間(modification time),單位為天
-mmin n指定檔案的最後修改時間,單位為分鐘
-empty搜尋空檔案
-ipath p, -path p路徑名稱符合 p 的文件,ipath 會忽略大小寫
-name name, -iname name文件名稱符合 name 的文件。 iname 會忽略大小寫
-size n指定檔案的大小
-type c指定檔案的類型
-perm指定檔案的權限
-user指定檔案擁有者
-group指定檔案的群組
-exec對使用find的搜尋結果執行特定指令

基本操作

  1. 指定檔名搜尋
# 搜尋在當前目錄底下,檔名為file.txt的檔案
find . -name file.txt

# 透過正則搜尋符合的匹配txt檔案
find . -name "*.txt"

# 使用絕對路徑不分大小寫搜尋檔案
find /home -iname file.txt
  1. 指定檔案修改與存取時間搜尋
# 搜尋當前目錄下過去5天內檔案狀態有被存取過的檔案
find . -atime -5

# 搜尋當前目錄下過去5分鐘檔案狀態有被修改過的檔案
find . -cmin -5

# 搜尋當前目錄下,上次修改時間是在5天以上、10天以下的檔案
find . -mtime +5 -mtime -10
  • atime(Accesstime)指的是文件最後一次被訪問的時間;
  • mtime(Modifytime)指的是文件內容被修改的時間,但不包括權限的修改,比如用vim編輯器修改內容;
  • ctime(Changetime)指的是文件的權限、擁有者、所屬組及鏈接數發上改變的時間。
  1. 指定檔案類型搜尋
# 搜尋當前目錄及子目錄下,類型為文件
find . -type f

# 搜尋當前目錄及子目錄下,類型為目錄
find . -type d
  • b: 區塊裝置文件
  • c: 字型裝置文件
  • d: 目錄
  • p: 具名的pipe(FIFO)
  • f: 一般的檔案
  • l: 連結檔,如果與 -L 或 -follow 參數同時使用時,就只會搜尋到有問題的連結檔,如果想要與 -L 同時使用,請改用 -xtype
  • s: socket 檔案
  1. 指定檔案權限搜尋
# 搜尋當前目錄下權限為777的檔案
find . -type f -perm 777

# 搜尋當前目錄下權限不是777的檔案
find . -type f ! -perm 777

# 搜尋當前目錄下權限為644而且有SGID的檔案
find . -type f -perm 2644

# 搜尋當前目錄下,user只有read的權限的檔案
find . -type f -perm /u=r
  • 如果不帶有任何前綴,則只有完全符合的檔案才會成功匹配
  • 如果帶有-,則代表同時符合,任何一類用戶(ugo)的權限中的每一位(rwx)都要同時符合mode所表示的條件,9位權限之間存在“與”關係。
  • 如果帶有/,則代表至少符合,任何一類用戶(ugo)的權限中的任何一位(rwx)符合mode所表示的條件即可,9位權限之間存在“或”關係。
  1. 指定檔案屬性搜尋
# 搜尋當前目錄下,user為root的檔案
find . -user root

# 搜尋當前目錄下,group為root的檔案
find . -group root
  1. 指定檔案大小搜尋
# 搜尋當前目錄下,檔案大小剛好是50MB的檔案
find . -size 50M

# 搜尋當前目錄下,檔案大小介於50MB到100MB之間的檔案
find . -size +50M -size -100M

# 搜尋當前目錄下,大於100MB的檔案並將其刪除
find . -size +100M -exec rm -rf {} \;
  1. 指定搜尋空檔案與隱藏檔案
# 搜尋當前目錄下的空目錄
find . -type d -empty

# 搜尋當前目錄下的隱藏檔案
find . -type f -name ".*"
  1. 實用範例
# 搜尋當前目錄下,檔案大小在10MB以上的log檔,並將其刪除
find . -type f -name *.log -size +10M -exec rm {} \;

# 搜尋當前目錄下所有的php檔案,並找尋有關鍵字ok以及匹配處的以下5行
find ./ -name \*.php -exec grep -wnHA5 ok {} \;

# 搜尋當前目錄下所有檔案,並找出有network關鍵字的檔案
find . -name "*" | xargs grep "network"

在 -exec 前面是 find 指令找出想要的檔案,在 -exec 後面的 command 是要執行的指令, 而 { } 包著的是找到的檔案或目錄,後面需要加上 ; 完結。

參考資料