我目前不在 Linux 机器上。以下命令会产生我想要的结果吗?
ls | grep ".pdf" | wc
答案1
不,“.pdf”的含义太多了,例如foo.pdfa
和bpdf
。
此外,即使您没有错误匹配的文件,wc
没有选项也会输出输入中的行数、单词数和字节数,因此您会得到比您感兴趣的多两个数字。如果您想要grep
混合,您可以可以ls | grep -E "\.pdf$" | wc -l
,但除非您在该目录中有很多 pdf 文件,否则不需要 grep,否则您可以使用ls *.pdf | wc -l
.
后来我想通了之后补充道:
另外,grep
可以进行计数,因此如果grep
在混合中,只需将-c
选项添加到 grep 而不是通过管道将输出传递到wc -l
,所以ls | grep -cE "\.pdf$"
或者如果您想避免计数名为<something.pdf>
:的目录ls -l | grep -cE "^-.*\.pdf$"
。
答案2
你应该使用
ls | grep ".pdf" | wc -l
该-l
参数将仅计算结果行数,如果没有该参数,-l
您还会获得其他计数,例如换行符、单词和字节数。请注意,这将计算包含“.pdf”字符链的文件名(以及文件夹)。
要仅计算以 结尾的文件.pdf
,您最好使用find
:
find . -type f -name "*.pdf" | wc -l
答案3
您的 shell 应该能够进行过滤:
ls *.pdf | wc -l
或者您必须确保匹配文件名的结尾:
ls | grep "*\.pdf$" | wc -l
(注意美元符号)。
注意:这两个也将匹配目录以“.pdf”结尾(如果有)。
注 2:ls
应该表现得就像您-1
在通过管道传输其输出后立即为其提供了选项一样。否则,请添加此开关。