在Linux 系統中找不到某個文件夾?別擔心! Linux 提供強大的命令行工具來查找丟失的目錄。其中最通用的工具是find
命令,它允許您根據各種條件搜索目錄。本指南將介紹在Linux 系統中查找目錄的幾種方法。
首先,我們將演示如何按名稱搜索目錄。然後,我們將演示如何查找最近修改的目錄和過去N 天內修改的目錄。您還將學習如何識別較舊的目錄——那些N 天前修改的目錄。
接下來,我們將介紹如何使用maxdepth
和mindepth
選項在指定的深度範圍內搜索目錄。您將了解如何根據目錄的權限以及包含特定數量文件的目錄來查找目錄。
最後,我們將解釋如何搜索空目錄,這對於識別文件系統中未使用的或不必要的部分非常有用。
在整個指南中,我們將提供實際示例,以幫助您在使用Linux 中的目錄時充分利用find
命令。
目錄
如果您知道目錄的名稱和搜索的起始位置,請使用以下命令:
find /path/to/search -type d -name "directory_name"
將/path/to/search
替換為實際路徑,將"directory_name"
替換為目標目錄。
示例:
$ find ~/ -type d -name "Documents"
此命令從用戶的home 目錄(~/) 開始搜索名為"Documents" 的目錄。
以下是命令的細分:
find ~/
: 從用戶的home 目錄(~/) 開始搜索。-type d
: 告訴find
搜索目錄(-type d) 而不是普通文件。-name "Documents"
: 此選項告訴find
查找名為"Documents" 的目錄。 "Documents" 兩邊的引號確保搜索查找的是精確名稱,而不僅僅是包含"Documents" 單詞的目錄。因此,此命令將搜索用戶的home 目錄及其所有子目錄,查找任何名為"Documents" 的目錄。如果找到任何目錄,它將打印這些目錄的完整路徑。
如果您想從當前目錄而不是home 目錄(~/) 開始搜索,您可以簡單地省略命令中的~/ 部分,如下所示:
$ find . -type d -name "Documents"
以下是每個選項的功能細分:
find .
: .
代表當前目錄,因此搜索將從當前工作目錄開始。-type d
: 告訴find
搜索目錄。-name "Documents"
: 此選項告訴find
查找名為"Documents" 的目錄。該命令將搜索當前目錄及其所有子目錄,查找任何名為"Documents" 的目錄,並打印這些目錄的完整路徑。
或者,您還可以使用$PWD
變量,它代表當前工作目錄,如下所示:
$ find $PWD -type d -name "Documents"
這兩個命令都將達到相同的結果,從當前目錄開始搜索。
這是find
命令中一個非常有用的標誌。
我們可以使用-iname
選項代替-name
來進行不區分大小寫的搜索。
以下是使用-iname
而不是-name
的示例:
$ find . -type d -iname "Documents"
-iname "Documents"
選項將匹配名稱為"Documents"、"documents"、"DOCUMENTS" 等的目錄。如果您不確定目錄名稱的確切大小寫,這將非常有用。
-name
和-iname
之間的主要區別在於:
-name
執行區分大小寫的搜索,因此它只會匹配與提供的模式大小寫完全相同的目錄。-iname
執行不區分大小寫的搜索,因此它將匹配目錄,而不管其大小寫如何。您還可以將搜索詞包含在通配符中,如下所示:
$ find . -type d -iname "*documents*"
此命令將列出當前目錄(及其子目錄)中所有名稱中包含"documents" 的目錄。
在您不知道或不關心要查找的目錄名稱的確切大小寫的情況下,使用-iname
可能更方便。
就我個人而言,在搜索某些內容時,我更喜歡在find
命令中使用-iname
選項。
如果您從find
命令中刪除-type d
部分,它將搜索匹配其他條件(如-name
或-iname
選項)的文件和目錄。
命令如下所示:
$ find . -iname "Documents"
以下是會發生的情況:
find
命令將搜索當前目錄(.) 及其所有子目錄,查找任何名為"Documents"(不區分大小寫)的項目(文件和目錄)。因此,此命令的輸出將包括:
刪除-type d
部分會使搜索範圍更廣,因為它將包含匹配指定名稱模式的目錄和文件。
如果您不確定要查找的"Documents" 條目是目錄還是文件,並且您想查找所有出現的情況,這將非常有用。
但是,如果您專門查找名為"Documents" 的目錄,最好保留-type d
選項以縮小搜索範圍。
要列出在特定日期範圍內修改的目錄,請使用-newermt
兩次。
例如,要搜索在2024 年3 月15 日和2024 年4 月15 日之間(不包括這兩天)創建或修改的目錄,您可以使用:
$ find /path/to/search -type d -newermt "2024-03-15" ! -newermt "2024-04-15"
以下是上述命令的細分:
find /path/to/search
: 告訴find
命令從/path/to/search
目錄開始搜索。-type d
: 此選項確保find
命令僅搜索目錄,而不是普通文件。-newermt "2024-03-15"
: 此選項告訴find
僅包含比2024 年3 月15 日更新(創建或修改)的目錄。! -newermt "2024-04-15"
: !
符號否定條件,因此這部分告訴find
排除比2024 年4 月15 日更新的目錄。這些選項的組合導致find
搜索在2024 年3 月15 日或之後創建或修改,但在2024 年4 月15 日之前的目錄。
例如,如果您想查找在特定時間段內創建或修改的所有目錄(例如,用於備份或審計),這將非常有用。
要查找過去n 天內修改的目錄,請使用-mtime
。
以下命令將搜索~/Projects/ 目錄下在過去7 天內修改過的目錄。
$ find ~/Projects/ -type d -mtime -7
以下是命令中每個部分的作用:
find ~/Projects/
: 告訴find
命令從~/Projects/ 目錄開始搜索。-type d
: 此選項確保find
命令僅搜索目錄,而不是普通文件。-mtime -7
: 此選項告訴find
僅包含在過去7 天內修改過的目錄(“-mtime”中的“m”代表“修改時間”)。 -mtime -7
部分的工作原理如下:
例如,如果您想查找最近在~/Projects/ 目錄中創建或更新的所有新目錄(也許是為了備份或跟踪),這將非常有用。
要查找N 天前修改的目錄(即(查找N 天前的目錄),請使用帶有加號的-mtime
。
例如,以下命令將搜索~/Projects/ 目錄下在7 天前修改過的目錄。
$ find ~/Projects/ -type d -mtime 7
換句話說,它將查找在過去7 天內未修改(創建、更新或訪問)的目錄。
-mtime 7
選項告訴find
僅包含修改時間(“-mtime”中的“m”)大於7 天前的目錄。
因此,此命令可用於查找在一段時間內未被觸碰或修改的目錄,這對於識別未使用的或過時的目錄或對項目目錄結構執行維護/清理等任務很有幫助。
我們如何知道目錄是否真的在X 天前修改?很簡單。
要驗證find
命令找到的目錄是否在7 天前修改,您可以使用stat
命令顯示每個目錄的修改時間。
$ find ~/Projects/ -type d -mtime 7 -exec stat -c '%n %y' {} \;
以下是上述命令的解釋:
find ~/Projects/ -type d -mtime 7
: 此命令部分與之前相同,查找7 天前的目錄。-exec stat -c '%n %y' {} \;
: 此部分使用find
的-exec
選項對找到的每個目錄運行stat
命令。stat -c '%n %y'
: stat
命令顯示目錄的文件名(%n) 和上次修改時間(%y)。{}
: 這是一個佔位符,由find
找到的當前目錄替換。\;
: 這終止了-exec
命令。運行此命令時,它將顯示7 天前每個目錄的路徑和上次修改時間。這使您可以驗證找到的目錄確實是在7 天前修改的。
以下是輸出示例:
<code>/home/ostechnix/Projects/Python 2024-03-22 14:18:14.958042173 0530 /home/ostechnix/Projects/Vim 2024-03-22 14:05:55.887041168 0530</code>
輸出中顯示的修改時間將幫助您確認目錄確實超過7 天,正如原始find
命令所要求的那樣。
我們可以使用find
命令的maxdepth
和mindepth
選項在指定的深度範圍內搜索目錄。
以下是語法:
find /path/to/search -mindepth X -maxdepth Y -type d
讓我解釋一下此命令中每個選項的作用:
find /path/to/search
: 告訴find
命令從/path/to/search
目錄開始搜索。-mindepth X
: 此選項設置要包含在搜索結果中的目錄的最小深度級別。值X 代表從起點開始的最小目錄級別數。-maxdepth Y
: 此選項設置要包含在搜索結果中的目錄的最大深度級別。值Y 代表從起點開始的最大目錄級別數。-type d
: 此選項確保find
命令僅搜索目錄,而不是普通文件。請注意,
-mindepth
選項應在其他參數(包括-type
)之前指定。
例如,要在/Projects
目錄中搜索至少2 層深但最多4 層深的目錄,您可以使用以下命令:
$ find ~/Projects -mindepth 2 -maxdepth 4 -type d
此命令將搜索相對於/Projects
目錄至少2 層深且最多4 層深的目錄(包含)。
您可以根據您的具體需求調整X 和Y 的值。例如,如果您想搜索恰好3 層深的目錄,您可以使用:
$ find ~/Projects -mindepth 3 -maxdepth 3 -type d
這將僅在搜索結果中包含3 層深的目錄。
結合使用maxdepth
和mindepth
可以幫助您將搜索範圍縮小到特定範圍的目錄深度,這對於組織和管理文件系統非常有用。
要根據目錄的權限查找目錄,您可以使用帶有-perm
選項的find
命令。
find /path/to/search -type d -perm<permission_specification></permission_specification>
將/path/to/search
替換為您想要開始搜索的目錄,並將<permission_specification></permission_specification>
替換為所需的權限。您可以使用八進製表示法指定權限。
讓我向您展示一些示例。
要在當前目錄中查找具有權限755(即所有者為rwx,組和其他人為rx)的所有目錄:
$ find . -type d -perm 755
要查找所有者俱有rwx 權限、組具有rx 權限且其他人沒有權限的目錄:
$ find . -type d -perm 750
要在~/Projects 中查找所有者俱有任何權限且組和其他人具有rx 權限的所有目錄:
$ find ~/Projects~ -type d -perm -005
您可以根據您的具體要求調整<permission_specification></permission_specification>
。此外,如果需要,您可以使用-maxdepth
和-mindepth
選項來控制搜索的深度。
要查找包含特定數量文件的目錄,您可以結合使用find
、 wc
和bash 命令。
示例:
以下命令查找當前目錄及其子目錄中恰好包含4 個文件的目錄,並打印這些目錄的完整路徑。
$ find . -type d -exec bash -c 'if [ $(find "$1" -maxdepth 1 -type f | wc -l) -eq 4 ]; then echo "$1"; fi' _ {} \;
讓我們逐步分解命令:
find . -type d
: 從當前目錄(.) 開始搜索目錄(而不是文件)。-exec bash -c '...' _ {} \;
: 此部分使用find
的exec
選項為找到的每個目錄執行自定義Bash 腳本。if [ $(find "$1" -maxdepth 1 -type f | wc -l) -eq 4 ]; then echo "$1"; fi
: 這是為每個目錄執行的自定義Bash 腳本。$(find "$1" -maxdepth 1 -type f | wc -l)
: 此部分計算當前目錄(“$1”) 中的文件(而不是目錄)的數量。 -maxdepth 1
選項確保它只計算當前目錄中的文件,而不是子目錄中的文件。[ ... -eq 4 ]
: 這檢查當前目錄中的文件數量是否恰好為4。then echo "$1"; fi
: 如果條件為真(目錄恰好有4 個文件),則打印目錄的完整路徑。例如,如果您有一組特定目錄應該包含一定數量的文件,並且您想快速識別任何不符合該條件的目錄,這將非常有用。
要查找空目錄,請使用-empty
標誌:
find /path/to/search -type d -empty
例如,要搜索“Work”目錄中的空目錄,請運行:
$ find ~/Work/ -type d -empty
請記住根據需要調整路徑。
在本指南中,您學習了幾種使用find
命令在Linux 系統中搜索目錄的技術。
您可以按名稱、最近更改的時間或內部文件數量進行搜索。您甚至可以找到空文件夾或具有特定權限的文件夾。
通過了解如何使用maxdepth
、 mindepth
和size
等選項,您可以改進搜索以專注於您需要的特定目錄。
因此,下次文件夾丟失時,請不要驚慌!使用這些find
命令來跟踪它並保持文件的組織性。
以上是如何從命令行中找到Linux中的目錄的詳細內容。更多資訊請關注PHP中文網其他相關文章!