我的目标是在远程机器上找到所有 pdf 文件,所以我求助于有用的命令find
. 所以我输入
查找 ~ *.pdf或者
找到~“*.pdf”我一无所获。我在我的机器上做同样的事情,但我什么也没得到。我从我机器上的菜单中定期搜索,我找到了很多 pdf 文件。有人能告诉我我做错了什么吗?
Mic*_*yan 10
查看findutils的文档。该find
命令非常强大,因此界面有些复杂。你可以做你想做的:
find . -type f -iname '*.pdf'
Run Code Online (Sandbox Code Playgroud)
上面的命令的意思是“在 . 中查找不区分大小写名称匹配 *.pdf 的文件类型条目(并打印此类匹配的名称)”。find 命令实际上可用于对找到的文件执行命令(代替打印文件名或除打印文件名外)。但是,出于您的目的,您可能会发现自己更习惯于使用locate命令,它——假设您已经使用updatedb建立了 locate 数据库——使得查找文件变得非常容易。例如:
locate '*.pdf'
Run Code Online (Sandbox Code Playgroud)
您还会发现 locate 命令通常比 find 命令更快,因为 locate 使用文件名索引(locate 数据库),而 find 将为每次调用遍历层次结构。
您只是缺少说明您正在搜索的内容的谓词(例如-name
。)
要按名称在主目录中查找:
find ~ -name \*.pdf
Run Code Online (Sandbox Code Playgroud)
请注意,必须对通配符*
进行转义,以便 shell 在 find 得到它之前不会解释它。使用'*.pdf'
和"*.pdf"
将具有与 相同的效果\*.pdf
。
要不区分大小写地查找:
find ~ -iname \*.pdf
Run Code Online (Sandbox Code Playgroud)
仅将结果修剪为文件(名称表达式可能会为您处理此问题,但以防万一您有任何名称怪异的目录):
find ~ -type f -iname \*.pdf
Run Code Online (Sandbox Code Playgroud)
为了确保 find 遵循符号链接(我通常想在搜索时自己这样做):
find ~ -follow -type f -iname \*.pdf
Run Code Online (Sandbox Code Playgroud)
要对找到的文件执行某些操作:您可以使用 stdout 重定向将其转储到文件中(例如> filename
在最后添加),或者使用-exec
选项来运行命令(有关详细信息,请参阅手册页)。不过,后者一次对每个文件运行一个命令。让xargs
命令将您找到的文件作为参数传递给另一个命令通常会更快,一次或一次大块。例如,对于通过头文件的临时(但未编入索引)greps:
find ~ -follow -type f -name \*.h | xargs grep -nH "identifier"
Run Code Online (Sandbox Code Playgroud)
还有一个最后的扩展,如果您的文件和目录中有空格,则使最后一个命令正常工作:
find ~ -follow -type f -name \*.h -print0 | xargs -0 grep -nH "identifier"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
28574 次 |
最近记录: |