ls -R
递归列出文件并ls *.pdf
列出所有以.pdf
.我的问题是为什么ls
不将这 2 个函数合并为 1 个,例如ls -R \*.pdf
递归查找 PDF 文件。当然,还有find
其他的。我好奇。谢谢
答案1
因为shell 会将其扩展到当前工作目录中的所有 .pdf 文件,并且它与您期望用来查看任何子目录中的所有 .pdf 文件的命令*.pdf
无关;要完成该工作,您需要启用 shell (in )选项并使用它以便在任何子目录以及当前工作目录中查找/展开,如下所示:ls
*.pdf
bash
globstar
**
*.pdf
shopt -s globstar; ls -d -- **/*.pdf
此外,使用 using ls -R \*.pdf
,您正在寻找与文字匹配的单个文件*.pdf
,并且-R
这里没有查找子目录的效果(除非该*.pdf
文件实际上是一个目录),并且它只是用于递归地列出子目录。您可以结合使用ls
来grep
过滤 .pdf 文件。
ls -bR |grep '\.pdf$'
但这并不能保证它只会报告文件,但也会报告具有相同结束模式的目录。
好吧,正如您所说并且知道的,最好的选择是使用find
命令。
find . -type f -name '*.pdf'