我的目标是找到远程机器上的所有 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” 命令
也许不是最高效的,但它能很好地完成工作。