Linux

’ls | wc -l’ 結果與實際文件數不符

  • September 5, 2016

我需要計算文件夾下的文件數並使用以下命令。

cd testfolder
bash-4.1$ ls | wc -l
6

其實這個文件夾下只有五個文件,

bash-4.1$ ls
total 44
-rw-r--r-- 1 comp 11595 Sep  4 22:51 30.xls.txt
-rw-r--r-- 1 comp 14492 Sep  4 22:51 A.pdf.txt
-rw-r--r-- 1 comp  8160 Sep  4 22:51 comparison.docx.txt
-rw-r--r-- 1 comp   903 Sep  4 22:51 Survey.pdf.txt
-rw-r--r-- 1 comp  1206 Sep  4 22:51 Steam Table.xls.txt

看起來ls | wc -l甚至將其total 44視為一個文件,這是不正確的。

以上只是一個額外的資訊,

如果您喜歡處理輸出,您應該使用它find而不是ls,它有一些更適合(例如-print0)將結果傳遞給其他應用程序的未來。

在上述情況下,您可以像這樣使用它,

find . -type f | wc -l

這將列出目前目錄中的所有文件

它不起作用,因為wc -l返回命令輸出的行數ls,在這種情況下包括total 44. 由於您的 shell 有lsas的別名ls -cml,因此您會得到那些會擾亂輸出的額外資訊。

而是使用命令"ls" -Aq | wc -l。-A 命令列出目錄中的所有文件,包括點文件,但不包括.... 這裡的引用很重要——它們忽略別名並/bin/ls直接執行。

-q確保文件名全部列印在一行上,即使它們包含換行符(然後將呈現為?)。

引用自:https://unix.stackexchange.com/questions/307901