Linux 中 find 命令来定位 pdf 文件

Linux 中 find 命令来定位 pdf 文件

我的目标是找到远程机器上的所有 pdf 文件,因此我求助于有用的命令find。所以我输入

查找 ~ *.pdf
或者
找到〜“*.pdf”
但我什么也没得到。我在我的机器上做了同样的事情,但我什么也没得到。我从机器上的菜单上进行常规搜索,找到了不少 pdf 文件。有人能告诉我我做错了什么吗?

答案1

find并非毫无用处。你只是没有正确使用它。

尝试:

find . -type f -iname '*.pdf'

答案2

看看查找工具。该find命令非常强大,因此界面也有点复杂。您可以使用以下命令执行所需的操作:

find . -type f -iname '*.pdf' 

上述命令的意思是“在 . 中查找大小写不敏感的名称与 *.pdf 匹配的文件类型条目(并打印这些匹配项的名称)”。 find 命令实际上可用于对找到的文件执行命令(而不是打印文件名或除了打印文件名之外)。不过,对于您的目的,您可能更喜欢使用定位命令,假设您已经使用以下命令建立了定位数据库更新数据库-- 使查找文件变得非常容易。例如:

locate '*.pdf'

您还会发现,locate 命令通常比 find 命令更快,因为locate 使用文件名索引(locate 数据库),而 find 每次调用都会遍历层次结构。

答案3

您只是缺少了说明所搜索内容的谓词(例如-name。)

按名称在主目录中查找:

find ~ -name \*.pdf

请注意,必须对通配符*进行转义,以便 shell 在 find 处理它之前不会对其进行解释。使用'*.pdf'"*.pdf"将产生与 相同的效果\*.pdf

不区分大小写的查找:

find ~ -iname \*.pdf

将结果仅修剪为文件(名称表达式可能会为您解决这个问题,但以防万一您有任何名称奇怪的目录):

find ~ -type f -iname \*.pdf

为了确保 find 遵循符号链接(我通常在进行搜索时自己想这样做):

find ~ -follow -type f -iname \*.pdf

要对找到的文件执行某些操作:您可以使用 stdout 重定向将其转储到文件(例如在> filename末尾添加),或者使用-exec选项运行命令(有关详细信息,请参阅手册页)。不过,后者一次对每个文件运行一个命令。让命令将xargs找到的文件作为参数传递给另一个命令通常更快,一次全部传递或一次传递大块文件。例如,对于通过头文件临时(但未编入索引)的 grep:

find ~ -follow -type f -name \*.h | xargs grep -nH "identifier"

最后一个扩展是,如果文件和目录中有空格,可以使最后一个命令正常工作:

find ~ -follow -type f -name \*.h -print0 | xargs -0 grep -nH "identifier"

答案4

我曾经将 find 与 grep 结合起来,例如

寻找 。| grep -i “.pdf” 命令

也许不是最高效的,但它能很好地完成工作。

相关内容