首頁 > 系統教程 > Linux > 如何從命令行中找到Linux中的目錄

如何從命令行中找到Linux中的目錄

Lisa Kudrow
發布: 2025-03-18 09:07:11
原創
926 人瀏覽過

How To Find A Directory In Linux From Command Line

在Linux 系統中找不到某個文件夾?別擔心! Linux 提供強大的命令行工具來查找丟失的目錄。其中最通用的工具是find命令,它允許您根據各種條件搜索目錄。本指南將介紹在Linux 系統中查找目錄的幾種方法。

首先,我們將演示如何按名稱搜索目錄。然後,我們將演示如何查找最近修改的目錄和過去N 天內修改的目錄。您還將學習如何識別較舊的目錄——那些N 天前修改的目錄。

接下來,我們將介紹如何使用maxdepthmindepth選項在指定的深度範圍內搜索目錄。您將了解如何根據目錄的權限以及包含特定數量文件的目錄來查找目錄。

最後,我們將解釋如何搜索空目錄,這對於識別文件系統中未使用的或不必要的部分非常有用。

在整個指南中,我們將提供實際示例,以幫助您在使用Linux 中的目錄時充分利用find命令。

目錄

  • 在當前目錄中搜索目錄
  • 使用-iname 忽略大小寫
  • 搜索目錄和文件
  • 查找最近修改的目錄
  • 查找過去N 天內修改的目錄
  • 識別較舊的目錄
  • 在指定範圍內搜索目錄
  • 根據目錄權限查找目錄
  • 查找包含特定數量文件的目錄
  • 搜索空目錄
  • 總結

按目錄名稱搜索

如果您知道目錄的名稱和搜索的起始位置,請使用以下命令:

 find /path/to/search -type d -name "directory_name"
登入後複製

/path/to/search替換為實際路徑,將"directory_name"替換為目標目錄。

示例:

 $ find ~/ -type d -name "Documents"
登入後複製

此命令從用戶的home 目錄(~/) 開始搜索名為"Documents" 的目錄。

以下是命令的細分:

  1. find ~/ : 從用戶的home 目錄(~/) 開始搜索。
  2. -type d : 告訴find搜索目錄(-type d) 而不是普通文件。
  3. -name "Documents" : 此選項告訴find查找名為"Documents" 的目錄。 "Documents" 兩邊的引號確保搜索查找的是精確名稱,而不僅僅是包含"Documents" 單詞的目錄。

因此,此命令將搜索用戶的home 目錄及其所有子目錄,查找任何名為"Documents" 的目錄。如果找到任何目錄,它將打印這些目錄的完整路徑。

在當前目錄中搜索目錄

如果您想從當前目錄而不是home 目錄(~/) 開始搜索,您可以簡單地省略命令中的~/ 部分,如下所示:

 $ find . -type d -name "Documents"
登入後複製

以下是每個選項的功能細分:

  1. find . : .代表當前目錄,因此搜索將從當前工作目錄開始。
  2. -type d : 告訴find搜索目錄。
  3. -name "Documents" : 此選項告訴find查找名為"Documents" 的目錄。

該命令將搜索當前目錄及其所有子目錄,查找任何名為"Documents" 的目錄,並打印這些目錄的完整路徑。

或者,您還可以使用$PWD變量,它代表當前工作目錄,如下所示:

 $ find $PWD -type d -name "Documents"
登入後複製

這兩個命令都將達到相同的結果,從當前目錄開始搜索。

使用-iname 忽略大小寫

這是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"
登入後複製

以下是會發生的情況:

  1. find命令將搜索當前目錄(.) 及其所有子目錄,查找任何名為"Documents"(不區分大小寫)的項目(文件和目錄)。
  2. 它將在結果中包含名為"Documents" 的目錄和任何名為"Documents" 的普通文件。

因此,此命令的輸出將包括:

  • 名為"Documents"、"documents"、"DOCUMENTS" 等的任何目錄
  • 名為"Documents"、"documents"、"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"
登入後複製

以下是上述命令的細分:

  1. find /path/to/search : 告訴find命令從/path/to/search目錄開始搜索。
  2. -type d : 此選項確保find命令僅搜索目錄,而不是普通文件。
  3. -newermt "2024-03-15" : 此選項告訴find僅包含比2024 年3 月15 日更新(創建或修改)的目錄。
  4. ! -newermt "2024-04-15" : !符號否定條件,因此這部分告訴find排除比2024 年4 月15 日更新的目錄。

這些選項的組合導致find搜索在2024 年3 月15 日或之後創建或修改,但在2024 年4 月15 日之前的目錄。

例如,如果您想查找在特定時間段內創建或修改的所有目錄(例如,用於備份或審計),這將非常有用。

查找過去N 天內修改的目錄

要查找過去n 天內修改的目錄,請使用-mtime

以下命令將搜索~/Projects/ 目錄下在過去7 天內修改過的目錄。

 $ find ~/Projects/ -type d -mtime -7
登入後複製

以下是命令中每個部分的作用:

  1. find ~/Projects/ : 告訴find命令從~/Projects/ 目錄開始搜索。
  2. -type d : 此選項確保find命令僅搜索目錄,而不是普通文件。
  3. -mtime -7 : 此選項告訴find僅包含在過去7 天內修改過的目錄(“-mtime”中的“m”代表“修改時間”)。

-mtime -7部分的工作原理如下:

  • 減號(-) 表示“小於”或“在過去”。
  • 數字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' {} \;
登入後複製

以下是上述命令的解釋:

  1. find ~/Projects/ -type d -mtime 7 : 此命令部分與之前相同,查找7 天前的目錄。
  2. -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命令的maxdepthmindepth選項在指定的深度範圍內搜索目錄。

以下是語法:

 find /path/to/search -mindepth X -maxdepth Y -type d
登入後複製

讓我解釋一下此命令中每個選項的作用:

  1. find /path/to/search : 告訴find命令從/path/to/search目錄開始搜索。
  2. -mindepth X : 此選項設置要包含在搜索結果中的目錄的最小深度級別。值X 代表從起點開始的最小目錄級別數。
  3. -maxdepth Y : 此選項設置要包含在搜索結果中的目錄的最大深度級別。值Y 代表從起點開始的最大目錄級別數。
  4. -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 層深的目錄。

結合使用maxdepthmindepth可以幫助您將搜索範圍縮小到特定範圍的目錄深度,這對於組織和管理文件系統非常有用。

根據目錄權限查找目錄

要根據目錄的權限查找目錄,您可以使用帶有-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選項來控制搜索的深度。

查找包含特定數量文件的目錄

要查找包含特定數量文件的目錄,您可以結合使用findwc和bash 命令。

示例:

以下命令查找當前目錄及其子目錄中恰好包含4 個文件的目錄,並打印這些目錄的完整路徑。

 $ find . -type d -exec bash -c 'if [ $(find "$1" -maxdepth 1 -type f | wc -l) -eq 4 ]; then echo "$1"; fi' _ {} \;
登入後複製

讓我們逐步分解命令:

  1. find . -type d : 從當前目錄(.) 開始搜索目錄(而不是文件)。
  2. -exec bash -c '...' _ {} \; : 此部分使用findexec選項為找到的每個目錄執行自定義Bash 腳本。
  3. 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 系統中搜索目錄的技術。

您可以按名稱、最近更改的時間或內部文件數量進行搜索。您甚至可以找到空文件夾或具有特定權限的文件夾。

通過了解如何使用maxdepthmindepthsize等選項,您可以改進搜索以專注於您需要的特定目錄。

因此,下次文件夾丟失時,請不要驚慌!使用這些find命令來跟踪它並保持文件的組織性。

以上是如何從命令行中找到Linux中的目錄的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板