Linux
’ls | wc -l’ 結果與實際文件數不符
我需要計算文件夾下的文件數並使用以下命令。
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 有ls
as的別名ls -cml
,因此您會得到那些會擾亂輸出的額外資訊。而是使用命令
"ls" -Aq | wc -l
。-A 命令列出目錄中的所有文件,包括點文件,但不包括.
和..
. 這裡的引用很重要——它們忽略別名並/bin/ls
直接執行。
-q
確保文件名全部列印在一行上,即使它們包含換行符(然後將呈現為?
)。