您是否曾经疯狂地搜索一个重要文件,却发现无处可寻,尽管您浪费了时间尝试遍历每个目录,这是一个常见问题,尤其是拥有大量无组织文件的新用户?和目录。本文介绍如何使用 Linux find 命令以不同的方式查找文件和目录。 
Linux中的find命令是什么
find 命令是最重要的工具之一,可帮助 Linux 用户使用各种选项查找文件和文件夹。您还可以对返回的搜索项运行 shell 命令(稍后会详细介绍!)。使用 find 命令搜索文件和目录的语法是:
find <options> <location> <expression>下面是如何解释上面的语法:
-
<options>是用于缩小搜索范围的各种选项。 -
<location>指定 find 命令搜索的内存位置。 -
<expression>指定要搜索的搜索项。
与 find 命令结合使用的常见选项包括: 选项 解释 -name该选项用于指定文件或文件夹的名称。 -type这指定要搜索的项目的类型。 -exec exec 标志用于在输出上运行 shell 命令。 -size该标志根据内存占用来过滤项目。 -perm该标志根据文件和目录的权限过滤文件和目录。 -user该标志用于搜索特定用户拥有的文件和目录。 
在 Linux 上使用 find 命令的最佳方法
在 Linux 上使用 find 命令查找文件和目录的最常见方法是使用它们的名称。如果您不知道确切的文件名,可以使用通用的 find 命令仅按文件名的一部分来搜索文件。

1. 查找名称匹配的特定文件
使用 -iname 标志通过 find 命令搜索文件和目录。使用此标志进行搜索的优点是它会忽略文件名的大小写并搜索指定的名称。使用带有 -iname 标志的 find 命令的语法是:
find <location> -iname <search_name>例如,如果要在当前目录中搜索文件“test.txt”,请使用以下命令:
find . -iname "test.txt"其中,“.”表示文件位置相对寻址方式下的当前目录。如果您觉得相对模式难以理解,您也可以使用绝对寻址模式来定位文件位置。
“-iname”标志忽略文件名的大小写。要搜索精确的文件名匹配,请将 -iname 标志替换为 -name 标志。
find <location> -name <name_to_search> 
2. 在 Linux 上按名称模式查找文件
有时您需要使用一个重要文件,但您不记得它的全名。 find 命令在这种情况下可以成为救星。只需使用通配符来匹配文件名模式。通配符尝试将所有可用名称与指定模式进行匹配。假设我们需要在当前目录中查找文件“test-101.py”。您可以使用以下命令:
这将列出文件名中以“test”开头的各种文件,如下所示。
find . -type f -iname "test*"这里,添加类型f以指定搜索项的类型为文件。另外,请务必使用带双引号的通配符表达式以防止错误。
3. 查找名称匹配的文件或目录。
通常,find 命令会查找与该名称匹配的所有文件和目录。要仅搜索文件,请使用基本语法中的“-type f”选项。
find <location> -type f -name <name_to_search>例如,以下命令显示所有名为“test”的文件。
find . -type f -iname "test*"要仅搜索目录,请使用“-type d”标志,如下所示:
find <location> -type d -iname <name_to_search>例如,以下命令显示名为“test”的所有目录:
find . -type d -iname "test*"4. 搜索具有特定扩展名的文件
使用通配符和 find 命令的强大组合,您还可以根据文件的扩展名搜索文件。例如,如果您需要在当前目录中查找配置文件但不知道确切的名称,则可以使用以下命令:
find . -iname "*.conf"5.根据大小查找文件和目录
当与适当的大小描述符结合使用时,您可以使用带有 -size 标志的 find 命令根据文件和目录在内存中占用的大小来搜索 Linux 上的文件和目录。此外,您可以添加各种大小描述符来指定要搜索的文件大小限制。
在 Linux 上根据大小查找文件的基本语法是:
find <location> -type <search_item_type> -size <symbol><file_size><size_descriptor>除了“ -size <symbol><file_size><size_descriptor> ”部分之外,上述语法与前一个语法相同。这部分的解释如下:
- <symbol> 部分可以是“+”、“-”或留空。其中“+”表示搜索大于指定大小的文件/目录,“-”表示搜索小于指定大小的文件/目录。如果留空,find 命令将搜索与大小完全匹配的文件。
- <file_size> 指定文件/目录大小。
-
<size_descriptor>指向要搜索的文件大小范围。
您可以使用的不同类型的大小描述符有: 大小描述符 解释 c指定 find 命令以查找大小(以字节为单位)。 k指定 find 命令搜索大小(以千字节为单位)。 M指定 find 命令来搜索大小(以兆字节为单位)。 G指定 find 命令来搜索大小(以 GB 为单位)。
上面的语法对于某些用户来说可能看起来很复杂,但是通过一些例子会更容易理解。
- 如果需要显示 Documents 目录中 4 KB 的目录,请使用以下命令:
find ~/Documents -type d -size 4k- 或者,如果您的空间不足并且需要查看 Documents 目录中大于 100 MB 的文件,请使用以下命令:
find ~/Documents -type f -size +100M- 如果需要查看Documents目录下小于10MB的文件,可以使用以下命令:
find ~/Documents -type f -size -10M- 如果需要查看Documents目录下的空文件,可以使用以下命令:
find ~/Documents -type f -size 06.查找符合特定权限的文件和目录
Linux 中的权限对于保护文件和目录免遭意外访问至关重要。有关更多信息,请参阅我们的 Linux 权限综合指南。
要根据权限集搜索文件和目录,请使用以下语法:
find <location> -type <search_item_type> -perm <permission_set>上述语法允许绝对或相对模式的<permission_set>寻址。
假设您需要搜索一个对 root 具有只读权限的文件。使用以下命令:
find ~/Documents/test/ -type f -perm 400或者,如果您想查找对所有人都具有读写权限的文件,请使用以下命令:
find ~/Documents/test/ -type f -perm a=r+w7. 查找用户拥有的文件和目录
如前所述,Linux find 命令允许您根据文件设置的权限来搜索文件。接下来,我们将向您展示如何查看特定用户拥有的文件。除了新的 -user 标志之外,基本语法基本保持不变,该标志指定 find 命令来搜索用户拥有的文件。
find <location> -type <search_item_type> -user <username>例如,如果您想查看当前目录中“test”用户拥有的文件,请使用以下命令:
find . -type f -user test8. 使用带有 -exec 标志的 find 命令
-exec 标志允许 find 命令执行实际的 shell 命令,从而多次增强其功能。 -exec 标志对返回的所有搜索结果运行 shell 命令。使用带有 -exec 标志的 find 命令的基本语法是:
find <location> <options> -exec <shell_command> {} ;在上面的语法中,{}用于将find命令找到的搜索结果插入到shell命令中。举个例子会更清楚。
假设您要将当前目录中名为 test.txt 的文件复制到 /tmp/docs/。使用以下命令:
find . -iname renaming.sh -exec cp {} ./testing \;在上面的例子中,如果找到“ renaming.sh ”文件,它将直接插入到“ {} ”的位置,并执行正常的复制过程。最后的分号 (;) 标志着命令的结束。
现在让我们看看 -exec 标志如何处理多个文件。如果要将当前目录中的所有 .pdf 文件移动到主目录中名为“ftesting”的新目录,可以使用以下命令:
find .-name "*.pdf" -exec mv {} ./testing + \;如果您想使用 mv 命令重命名,请参阅我们有关如何在 Linux 上重命名文件的文章。本文介绍了重命名文件的四种不同方法。
9. 在Linux上查找和删除文件和目录
在 Linux 上,您可能需要删除某些文件/目录。您可能认为您需要编写一个复杂的 shell 脚本。但是,您可以轻松地使用 -exec 命令根据您指定的规则删除由 find 命令过滤的文件或目录。使用 find 命令删除文件的基本语法是:
find <location> <options> -type <search_item_type> -exec rm -vf {} ;有些用户可能会觉得上述命令难以理解。为了使事情变得更容易,您可以使用 -delete 标志而不是整个 -exec 部分来删除项目。在 Linux 上使用 -delete 标志和 find 命令删除文件的语法是:
find <location> <options> -type <search_item_type> -delete删除具有确切名称的文件和目录
删除文件/目录的工作方式与使用 find 命令搜索文件/目录的方式相同。使用 find 删除文件的语法是:
find <location> <options> -type <search_item_type> -name <file_to_delete> -delete如果要删除当前目录下的“test.txt”文件,可以使用以下命令:
find . -type f -name test.txt -delete删除名称部分匹配的文件
如果删除了一个文件并且只记住了部分名称,则可以使用通配符来查找与指定文件名匹配的各种名称。在 Linux 上使用 find 命令删除具有部分名称的文件和目录的语法为:
find <location> <options> -type <search_item_type> -name <name_with_wildcard> -delete例如,要删除所有以名称“test”开头的文件,请使用以下命令:
find . -type f -name "test*" -delete删除相同扩展名的文件
如果需要删除目录中所有具有相同扩展名的文件,只需在末尾添加 -delete 标志即可。删除所有具有相同扩展名的文件的语法是:
find <location> -type f -name "*.<extension>" -delete例如,如果要删除当前目录下的所有.pdf文件,可以使用以下命令:
find . -type f -name "*.pdf" -delete如果您想了解在 Linux 上删除文件和目录的其他方法,请参阅文章如何在 Linux 上删除文件和如何在 Linux 上删除目录。我们建议您始终先运行不带删除标志的 find 命令。一旦您对结果感到满意,您最终可以通过应用 -delete 标志来删除该项目。
使用 find 命令删除空文件和目录
删除空文件和目录非常容易。要在 Linux 上搜索空文件夹和文件,只需将 -delete 标志添加到命令末尾即可。删除空文件和文件夹的语法是:
find <location> -type <search_item_type> -size 0 -delete 




![2021 年如何设置 Raspberry Pi Web 服务器 [指南]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)

