如何更有效地使用 find 命令?

Sam*_*007 15 command-line find

我想知道,有效使用 find 命令的最佳方法是什么?

我通常使用,find [filename] [dir]这给了我一长串文件名,它们都与我的搜索没有任何关系。

我只需要在特定目录中找到一个文件。那命令是什么?

roa*_*dmr 25

您通常会告诉 find 从哪里开始搜索,以及要查找的内容。因此,搜索路径的语法和您实际尝试查找的内容是不同的。

对于您提到的用例,假设您要在以下位置找到passwd文件/etc

find /etc/ -name passwd
Run Code Online (Sandbox Code Playgroud)

你是说“从等开始,寻找一个名称passwd

如果您不指定标准(或 find 说法中的“选项”),则 find 所做的是,它从您指定的路径(或路径)开始,并递归地查找下面的所有文件和目录。因此,选项“过滤”这些文件以缩小您要查找的范围。

在文件系统中的任何位置查找所有 JPG 文件:

find / -name "*jpg" 
Run Code Online (Sandbox Code Playgroud)

建议在您的选项中使用引号,否则 shell 扩展会导致您头疼。

在文档或下载中查找任何 pdf 文件,无论大小写:

find Documents/ Downloads/ -iname "*pdf"
Run Code Online (Sandbox Code Playgroud)

如果您这样做man find并向下滚动到 TESTS,您将找到 find 可用于缩小搜索范围的所有“标准”。您可以搜索具有特定文件名、由特定用户或组拥有、具有特定文件权限、属于特定类型的文件(例如,-type d将仅查找目录,而-type f将仅查找纯文件,不包括目录)、更新或更旧的文件特定天数(或分钟数)、空文件、可执行文件等。

在 find 的手册页中,您还会找到一个名为 ACTIONS 的部分,这些部分可以跟在条件之后,并且将由匹配所有条件的任何文件触发。所以你可以find做一些事情,比如删除它找到的文件,对它们执行任意命令,等等。

但当然基本语法仍然存在:

find [starting path(s)] [conditions or criteria]
Run Code Online (Sandbox Code Playgroud)