我想在 OSX 上的目录及其子目录中查找所有 PDF 文件。
我知道子目录中有一些 PDF,因为例如这会产生很多结果:
ls myfolder/pdfs/*.pdf
Run Code Online (Sandbox Code Playgroud)
我所有的谷歌搜索都表明我想要ls -R
,但这不会产生任何结果:
ls -R *.pdf
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我可以通过这种方式找到一些结果:
ls -R | grep pdf
Run Code Online (Sandbox Code Playgroud)
但是我看不到文件的完整路径,这不是很有帮助。
ls -R *.pdf
将ls
递归调用任何匹配的内容*.pdf
(如果*.pdf
当前目录中没有任何匹配项,则不会得到任何结果,如果有,则只有在它是目录时才会递归到该目录中)。 ls -R | grep pdf
将向您显示ls -R
结果中与正则表达式匹配的所有内容pdf
,这不是您想要的。
这是你需要的:
find myfolder -type f -name '*.pdf'
Run Code Online (Sandbox Code Playgroud)
这将为您提供文件名与模式匹配的目录-type f
中或myfolder
目录下的所有常规文件 ( )的路径名*.pdf
。需要引用该模式以保护它免受 shell 的影响。
使用zsh
shell(最近成为 macOS 上的默认 shell):
print -rC1 myfolder/**/*.pdf(.ND)
Run Code Online (Sandbox Code Playgroud)
这将在单个列中打印出目录中或目录下myfolder
名称以.pdf
,结尾的所有常规文件的路径名。匹配将包括隐藏名称。该N
和D
在水珠预选赛对应设置nullglob
,并dotglob
在外壳选项bash
壳(但仅限于这一个文件名匹配模式),和点使得模式只匹配常规文件(即不是目录等)