在 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 权限、组具有 r-x 权限且其他人没有权限的目录:
$ find . -type d -perm 750
要在 ~/Projects 中查找所有者具有任何权限且组和其他人具有 r-x 权限的所有目录:
$ 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中文网其他相关文章!