在Linux中查找命令以找到pdf文件


10

我的目标是在远程计算机上查找所有pdf文件,因此我使用了有用的命令find。所以我输入

找到〜* .pdf
要么
找到〜“ * .pdf”
我什么也没得到。我在机器上执行相同操作,但一无所获。我从机器上的菜单中进行常规搜索,我发现了很多pdf文件。有人可以告诉我我在做什么错吗?


11
如果您想获得良好的答复,请在您的问题之外保留负面意见。在一个相关的故事中,find绝非没有用。
维尔特尔2010年

8
当然,您有权发表言论。但是您确实希望得到良好的回应,对吗?不,您没有权利做出良好的建设性回应。那是特权。
维尔特尔2010年

2
坏工人总是责怪他的工具。换句话说,这里纯PBCAK
Pascal Thivent,2010年

5
@Wilhelmtell,我认为Martin的说法很公平-该命令最初不应该被命名为“ find”,更像是“ walkpath_and_execute”……它没有最直观或用户友好的界面,并且功能更多不仅仅是查找文件。简单名称“ find”具有欺骗性,因为它暗示了它没有的简单界面。当然,发现是远远无用的,效果很好,但人们很难责怪初学者不知道之间的“发现”的区别,“定位”,“它”,等等
迈克尔·亚伦Safyan

1
@迈克尔,我没有在这里责怪任何人。或者更确切地说,我不是在这里指责的人。我什至没有说find是直观的。我也许可以用更好的语气说同样的话。有时我对(愚蠢的)负面评论做出反应。
维尔特尔2010年

Answers:


29

find绝不是没有用的。您只是没有正确使用它。

尝试:

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


@Martin-乐于助人,请务必将问题标记为已回答!
米奇·登普西

@stepancheg是的,为什么不断开互联网并打印纸质版。
bobobobo

9

查看findutils的文档。该find命令功能非常强大,因此界面有些复杂。您可以执行以下操作:

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

上面的命令的意思是“在。中查找类型名称不匹配* .pdf的文件类型的条目(并打印此类匹配的名称)”。find命令实际上可以用于对找到的文件执行命令(而不是打印文件名或除了打印文件名之外)。但是,出于您的目的,您可能会发现自己对locate命令比较满意,假设您已使用updatedb建立了locate数据库,那么查找文件就非常容易。例如:

locate '*.pdf'

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


6

您只是缺少表明您要搜索的内容的谓词(例如)-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"

实际上,如果当前目录中以.pdf结尾的文件,“ *。pdf”将扩展,对吗?(注释)
Peter Jaric 2010年

1
不在狂欢中。在bash手册中:“用双引号引起来的字符会保留所有引号内的字符的字面值,但[dollar],[backquote],[pipe]和启用历史扩展功能时除外。[bang]。 “ 自己尝试进行确认:ls“ * .txt”位于其中包含文本文件的目录中。
Owen S.

是的,您当然是对的。我不知道我从哪里得到这个主意。感谢您纠正我。
Peter Jaric 2012年

3

看一下本教程

我想你想做的是

find . -name "*.pdf"

您应该使用该iname属性来获得更好的走廊视野
Mitch Dempsey 2010年

0

我曾经将查找与grep相结合

找 。| grep -i“ .pdf”

也许不是最高效率的,但可以做得很好。


这可能在做find直接,如果你愿意,通过-iregexfind ~ -iregex '.*\.pdf'。问题是,在find处理模式时,总是要^在前面和$后面都有a ,因此您的模式需要更复杂一些。还要注意:.您的模式中实际上是单字符通配符,而不是字面量。
Owen S.

0

查找最近x天内需要下载的文件

find ~ -type f -iname '*.pdf' -mtime -1

可以在主~目录及以下目录中找到带有扩展名的pdf文件(.pdf不论大写和小写(即i in iname)),并在1天之前进行了修改,因为我已添加mtime -1; 如果您在mtime中输入-60,则将是最近60天。


0

要在“找到的”文件中执行搜索,需要进行以下构造:

find <dir> -type f -iname <name> -exec grep -H <string> {} \;

exec命令必须以转义的“;”结尾 grep需要使用-H来打印出文件路径,除了文件中“ string”所在的行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.