为什么 ls -R 不递归列出某个模式的文件?

为什么 ls -R 不递归列出某个模式的文件?

ls -R递归列出文件并ls *.pdf列出所有以.pdf.我的问题是为什么ls不将这 2 个函数合并为 1 个,例如ls -R \*.pdf递归查找 PDF 文件。当然,还有find其他的。我好奇。谢谢

答案1

因为shell 会将其扩展到当前工作目录中的所有 .pdf 文件,并且它与您期望用来查看任何子目录中的所有 .pdf 文件的命令*.pdf无关;要完成该工作,您需要启用 shell (in )选项并使用它以便在任何子目录以及当前工作目录中查找/展开,如下所示:ls*.pdfbashglobstar***.pdf

shopt -s globstar; ls -d -- **/*.pdf

此外,使用 using ls -R \*.pdf,您正在寻找与文字匹配的单个文件*.pdf,并且-R这里没有查找子目录的效果(除非该*.pdf文件实际上是一个目录),并且它只是用于递归地列出子目录。您可以结合使用lsgrep过滤 .pdf 文件。

ls -bR |grep '\.pdf$'

但这并不能保证它只会报告文件,但也会报告具有相同结束模式的目录。

好吧,正如您所说并且知道的,最好的选择是使用find命令。

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

相关内容