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
的目錄及其子目錄。
- 例子:
示例
-
查詢當前目錄下所有
.log
檔案:find . -name "*.log"
-
查詢
/var/log
目錄下大於 100MB 的檔案:find /var/log -size +100M
-
查詢 7 天前修改過的檔案,並刪除它們:
find /path -mtime +7 -exec rm -f {} \;
-
查詢過去 30 分鐘內訪問過的檔案,並列印它們的路徑:
find /path -amin -30 -print
-
查詢並刪除所有
.tmp
檔案(慎用):find /path -name "*.tmp" -delete
總結
find
命令是一個功能強大的工具,用於在目錄樹中搜尋和操作檔案。透過掌握 find
的各種選項和操作,你可以高效地管理和處理系統中的檔案。