Skip to content
On this page

Linux:使用Find命令搜索文件

🎫 教程内容于 2023-04-04 在以下平台驗證通過
✅ Ubuntu 22.10
✅ Debian 11
✅ CentOS Stream 9
✅ macOS 13.2.1

Linux中的find命令是一個強大的工具,它允許您基於各種參數在給定目錄層次結構中搜索文件和目錄。在本教程中,我們將探討如何使用find命令及其各種選項。

基本語法

find命令的基本語法如下:

sh
find [目錄] [表達式]

這裏,[目錄]是您要在其中搜索文件的目錄,[表達式]是您要應用的搜索條件。find命令將在給定的[目錄]及其子目錄中搜索與指定的[表達式]匹配的文件和目錄。

find命令的輸出是與指定搜索條件匹配的文件和目錄列表。例如,如果運行以下命令:

sh
find . -name "*.txt"

您將獲得當前目錄及其子目錄中所有具有.txt擴展名的文件列表:

./example.txt
./example2.txt
./subdir/example3.txt

通過文件名查找文件

要通過文件名查找文件,請使用 -name 選項,後跟您要查找的文件名。例如,要在當前目錄及其子目錄中搜索名爲 example.txt 的文件,請使用以下命令:

sh
find . -name "example.txt"

這將在當前目錄及其子目錄中搜索所有名爲 "example.txt" 的文件。

要搜索具有特定擴展名的所有文件,請使用 -name 選項,後跟通配符字符 * 和您要查找的擴展名。例如,要在當前目錄及其子目錄中搜索所有具有 .txt 擴展名的文件,請使用以下命令:

sh
find . -name "*.txt"

這將在當前目錄及其子目錄中搜索所有具有 .txt 擴展名的文件。

實際上,通配符字符 * 可以在文件名的任何部分中使用。例如:

sh
find . -name "example*"
find . -name "*example.txt"
find . -name "*example.*"

查找目錄

要在當前目錄及其子目錄中搜索所有目錄,請使用 -type 選項後跟 d。例如,要搜索當前目錄及其子目錄中的所有目錄,請使用以下命令:

sh
find . -type d

這將在當前目錄及其子目錄中搜索所有目錄。

按修改時間查找文件

要搜索在特定時間範圍內修改的所有文件,請使用 -mtime 選項後跟天數。如果要搜索在過去 n 天內修改的文件,請使用負數 -n

例如,要搜索在過去 7 天內修改的所有文件,請使用以下命令:

sh
find . -mtime -7
find . -mtime -1w

-mtime 選項的默認時間單位爲天。

您可以在 macOS 上使用其他時間單位:

  • s - 秒
  • m - 分鐘
  • h - 小時
  • d - 天
  • w - 周

您還可以使用 -atime-ctime 選項根據文件的訪問時間和創建時間搜索文件。

按文件大小查找文件

要搜索所有大於特定大小的文件,請使用 -size 選項,後跟帶有 + 符號的字節數大小。要搜索所有小於特定大小的文件,請使用 -size 選項,後跟帶有 - 符號的字節數大小。

例如,要在當前目錄及其子目錄中搜索所有大於 10MB 的文件,請使用以下命令:

sh
find . -size +10M

這將在當前目錄及其子目錄中搜索所有大於 10MB 的文件。

您可以使用的常見大小單位是:

  • c - 字節
  • k - 千字節(1024 字節)
  • M - 兆字節(1024 千字節)
  • G - 吉字節(1024 兆字節)
  • T - 太字節(1024 吉字節)
  • P - 拍字節(1024 太字節)

組合搜索條件

您可以組合多個搜索條件以查找符合特定條件的文件。例如,要搜索在過去 7 天內修改的具有特定擴展名的所有文件,請使用以下命令:

sh
find . -name "*.txt" -type f -mtime -7

這將在當前目錄及其子目錄中搜索所有在過去 7 天內修改的具有 .txt 擴展名的文件。

使用 find 命令的輸出

您可以以各種方式使用 find 命令的輸出。以下是一些示例:

要將 find 命令的輸出保存到文件中,請使用以下命令:

sh
find . -name "*.txt" > files.txt

這將把所有擴展名爲 .txt 的文件名保存到名爲 files.txt 的文件中。

要將 find 命令的輸出用作另一個命令的輸入,請使用 xargs 命令。

例如,要刪除具有特定擴展名的所有文件,請使用以下命令:

sh
find . -name "*.txt" -type f | xargs rm

要對 find 命令找到的每個文件執行操作,請使用 -exec 選項。

例如,要更改具有特定擴展名的所有文件的權限,請使用以下命令:

sh
find . -name "*.txt" -type f -exec chmod 644 {} \;

-exec 參數的語法是:

sh
-exec command {} \;
  • command 是您要在 find 找到的文件上執行的命令。
  • {} 是一個佔位符,將被 find 找到的文件的名稱替換。
  • \; 用於終止命令並表示 -exec 參數的結束。 使用 wc 命令來計算 find 命令找到的文件數量。例如,要計算具有特定擴展名的文件數量,請使用以下命令:
sh
find . -name "*.txt" -type f | wc -l

結論

Linux 中的 find 命令是一個強大的工具,它允許您根據各種條件搜索文件和目錄。通過使用其各種選項和組合搜索條件,您可以快速找到所需的文件和目錄。您還可以以各種方式使用 find 命令的輸出來對找到的文件執行操作。