我的目标是在远程计算机上查找所有pdf文件,因此我使用了有用的命令find
。所以我输入
找到〜* .pdf要么
找到〜“ * .pdf”我什么也没得到。我在机器上执行相同操作,但一无所获。我从机器上的菜单中进行常规搜索,我发现了很多pdf文件。有人可以告诉我我在做什么错吗?
find
是直观的。我也许可以用更好的语气说同样的话。有时我对(愚蠢的)负面评论做出反应。
我的目标是在远程计算机上查找所有pdf文件,因此我使用了有用的命令find
。所以我输入
找到〜* .pdf要么
找到〜“ * .pdf”我什么也没得到。我在机器上执行相同操作,但一无所获。我从机器上的菜单中进行常规搜索,我发现了很多pdf文件。有人可以告诉我我在做什么错吗?
find
是直观的。我也许可以用更好的语气说同样的话。有时我对(愚蠢的)负面评论做出反应。
Answers:
查看findutils的文档。该find
命令功能非常强大,因此界面有些复杂。您可以执行以下操作:
find . -type f -iname '*.pdf'
上面的命令的意思是“在。中查找类型名称不匹配* .pdf的文件类型的条目(并打印此类匹配的名称)”。find命令实际上可以用于对找到的文件执行命令(而不是打印文件名或除了打印文件名之外)。但是,出于您的目的,您可能会发现自己对locate命令比较满意,假设您已使用updatedb建立了locate数据库,那么查找文件就非常容易。例如:
locate '*.pdf'
您还会发现,locate命令通常比find命令快,因为find使用文件名索引(locate数据库),而find会遍历每次调用的层次结构。
您只是缺少表明您要搜索的内容的谓词(例如)-name
。
要在主目录中按名称查找:
find ~ -name \*.pdf
请注意,必须对通配符*
进行转义,以便外壳在找到它之前无法对其进行解释。使用'*.pdf'
和"*.pdf"
将具有与相同的效果\*.pdf
。
要不区分大小写地查找:
find ~ -iname \*.pdf
要将结果仅修剪到文件中(名称表达式可能会为您解决这个问题,但以防万一您有任何奇怪命名的目录):
find ~ -type f -iname \*.pdf
为了确保找到以下符号链接(我通常想在搜索时自己做):
find ~ -follow -type f -iname \*.pdf
要对找到的文件进行处理:您可以使用stdout重定向将此文件转储到文件中(例如> filename
,末尾固定),或使用-exec
选项运行命令(有关详细信息,请参见手册页)。但是,后者一次在每个文件上运行一个命令。通常,让xargs
命令一次或一次大块地将命令将找到的文件作为参数传递给另一个命令通常会更快。例如,对于临时(但未编制索引)通过头文件进行抓取:
find ~ -follow -type f -name \*.h | xargs grep -nH "identifier"
最后一个扩展名,如果文件和目录中包含空格,则使最后一个命令正常工作:
find ~ -follow -type f -name \*.h -print0 | xargs -0 grep -nH "identifier"
find
绝非没有用。