`find` 命令詳解

daikq發表於2024-08-13

find 命令是 Unix 和類 Unix 系統(如 Linux)中的一個強大工具,用於在目錄樹中搜尋檔案和目錄。它提供了多種選項來進行復雜的搜尋,可以根據檔案的名稱、型別、時間、大小等條件篩選檔案。以下是 find 命令的詳細介紹,包括常用選項和示例。

基本語法

find [路徑] [選項] [測試條件] [操作]
  • 路徑: 指定要搜尋的目錄路徑。可以是一個或多個路徑,也可以是當前目錄(.)。
  • 選項: 控制 find 命令的行為,如忽略錯誤、顯示幫助資訊等。
  • 測試條件: 用於匹配檔案的條件,如檔名、型別、修改時間等。
  • 操作: 對匹配的檔案執行的操作,如列印路徑、刪除檔案等。

常用選項

  • -name: 根據檔名匹配檔案。

    • 例子:find /path -name "*.txt" 查詢 /path 目錄下所有副檔名為 .txt 的檔案。
  • -iname: 類似於 -name,但不區分大小寫。

    • 例子:find /path -iname "*.jpg" 查詢 /path 目錄下所有副檔名為 .jpg(大小寫不敏感)的檔案。
  • -type: 根據檔案型別匹配檔案。

    • f:普通檔案
    • d:目錄
    • l:符號連結
    • 例子:find /path -type d 查詢 /path 目錄下所有目錄。
  • -size: 根據檔案大小匹配檔案。

    • 例子:find /path -size +1M 查詢 /path 目錄下大於 1MB 的檔案。
    • 可以使用 c(位元組)、k(千位元組)、M(兆位元組)等單位。
  • -mtime: 根據檔案最後修改時間匹配檔案。

    • -mtime n:匹配修改時間為 n 天前的檔案。
    • -mtime +n:匹配修改時間超過 n 天的檔案。
    • -mtime -n:匹配過去 n 天內修改的檔案。
    • 例子:find /path -mtime -7 查詢過去 7 天內修改的檔案。
  • -ctime: 根據檔案後設資料最後更改時間匹配檔案。

    • 例子:find /path -ctime +30 查詢在 30 天前更改過後設資料的檔案。
  • -atime: 根據檔案最後訪問時間匹配檔案。

    • 例子:find /path -atime -1 查詢過去 24 小時內被訪問過的檔案。
  • -mmin: 根據檔案最後修改時間,以分鐘為單位匹配檔案。

    • 例子:find /path -mmin +60 查詢超過 60 分鐘前修改的檔案。
  • -cmin: 根據檔案後設資料最後更改時間,以分鐘為單位匹配檔案。

    • 例子:find /path -cmin -30 查詢過去 30 分鐘內更改過後設資料的檔案。
  • -amin: 根據檔案最後訪問時間,以分鐘為單位匹配檔案。

    • 例子:find /path -amin +10 查詢 10 分鐘前訪問過的檔案。

操作

  • -print: 預設操作,列印匹配檔案的路徑。

    • 例子:find /path -name "*.log" -print 列印所有 .log 檔案的路徑。
  • -exec: 對匹配的檔案執行命令。

    • 例子:find /path -name "*.tmp" -exec rm -f {} \; 刪除所有 .tmp 檔案。{} 代表當前匹配的檔案,\; 結束命令。
  • -delete: 刪除匹配的檔案。注意: 使用時需要小心,因為檔案會被永久刪除。

    • 例子:find /path -name "*.bak" -delete 刪除所有 .bak 檔案。
  • -print0: 以 null 字元(\0)分隔路徑,適用於包含空格或特殊字元的檔名。

    • 例子:find /path -type f -print0 | xargs -0 rm 刪除所有匹配的檔案。
  • -prune: 排除指定目錄及其子目錄的搜尋。

    • 例子:find /path -type d -name "ignore" -prune -o -type f -print 查詢 /path 目錄下的所有檔案,但排除名為 ignore 的目錄及其子目錄。

示例

  1. 查詢當前目錄下所有 .log 檔案

    find . -name "*.log"
    
  2. 查詢 /var/log 目錄下大於 100MB 的檔案

    find /var/log -size +100M
    
  3. 查詢 7 天前修改過的檔案,並刪除它們

    find /path -mtime +7 -exec rm -f {} \;
    
  4. 查詢過去 30 分鐘內訪問過的檔案,並列印它們的路徑

    find /path -amin -30 -print
    
  5. 查詢並刪除所有 .tmp 檔案(慎用)

    find /path -name "*.tmp" -delete
    

總結

find 命令是一個功能強大的工具,用於在目錄樹中搜尋和操作檔案。透過掌握 find 的各種選項和操作,你可以高效地管理和處理系統中的檔案。