Select Page

Linux 的 find 指令是一個非常強大而且必定要學習的工具,用於在文件系統中搜索符合特定條件的文件或目錄。以下想要介紹這個指令,通過各種參數和選項來定制搜索條件,讓你能夠精確地找到所需的文件。

基本語法

find 指令的基本語法如下:

find [路徑...] [選項] [動作]
  • 路徑:指定 find 指令開始搜索的目錄。如果不指定,默認為當前目錄。
  • 選項:定義搜索的條件,例如按文件名、文件類型、修改時間等。
  • 動作:對搜索結果執行的操作,如列印文件名、刪除文件等。如果不指定動作,默認動作是列印所有找到的文件的路徑。

常用選項

  1. 按名稱搜索
    • -name 'pattern':搜索文件名匹配指定的模式的文件。模式可以包含通配符,如 *?
    • 示例:find /home/user -name '*.txt'
  2. 按類型搜索
    • -type f:僅搜索文件。
    • -type d:僅搜索目錄。
    • 示例:find /var/log -type f
  3. 按修改時間搜索
    • -mtime +n:搜索在 n 天之前被修改過的文件。
    • -mtime -n:搜索在最近 n 天內被修改過的文件。
    • 示例:find / -mtime -10
  4. 按大小搜索
    • -size +n:搜索大於 n 單位的文件。單位可以是 k(KB)、M(MB)、G(GB)。
    • -size -n:搜索小於指定大小的文件。
    • 示例:find / -size +100M

常用動作

  • -print:輸出匹配文件的完整路徑(這是默認動作)。
  • -delete:刪除找到的文件。
  • -exec cmd {} \;:對找到的每個文件執行指定的命令。{} 是一個占位符,代表當前找到的文件名。
  • 示例:find /tmp -type f -mtime +30 -exec rm {} \;

最常使用的動作

搜尋整個硬碟中大於100MB的log檔案(不分大小寫),並且把她刪除

find / -type f -size +100M -iname "*.log" -delete

使用案例

尋找並刪除 30 天前的臨時文件

find /tmp -type f -mtime +30 -delete

尋找特定大小的日誌文件並列出詳細信息

find /var/log -type f -size +50M -exec ls -lh {} \;

尋找所有 JPG 文件並複製到另一個目錄

find /home/user/Pictures -name '*.jpg' -exec cp {} /home/user/Backup/ \;

find 完整參數

  • -mtime : 搜尋檔案的修改時間(天)
  • -mmin : 搜尋檔案的修改時間(分鐘)
  • -ctime : 搜尋檔案的建立時間(天)
  • -cmin : 搜尋檔案的建立時間(分鐘)
  • -atime : 搜尋檔案的最後開啟時間(天)
  • -amin : 搜尋檔案的最後開啟時間(分鐘)
  • -size : 搜尋檔案的大小
  • -name : 搜尋檔案名稱(有分大小寫)
  • -iname : 搜尋檔案名稱(不分大小寫)
  • -type f : 只搜尋“檔案”
  • -type d : 只搜尋“目錄”
  • -exec <cmd> {} \; : 把搜尋結果導向指令來執行
  • -user : 搜尋特定使用者的檔案或目錄
  • -o : 邏輯運算為「或」的意思
  • -print : 將結果印出於螢幕

參考資料

https://www.redhat.com/sysadmin/linux-find-command