在bash shell中打印文件数

时间:2019-03-05 13:13:46

标签: bash

所以我真的是bash的新手,并且正在计算某个目录中的文件数量,我已经知道该怎么做,

ls $1 | wc -l

但是,我想让shell在这样的文件数量后面打印出“文件”

3 files

我尝试了

ls $1 | wc -l
echo " files

但是输出是

3
files

如果我希望他们在一行中怎么办?

2 个答案:

答案 0 :(得分:0)

尝试一下:

  

回显$(ls $ 1 | wc -l)文件

答案 1 :(得分:0)

您可以使用printf来实现

printf '%s files' "$(ls "$1" | wc -l)"

,但是如果其中包含带换行符的文件名,则会出现(很少)问题(请参见https://mywiki.wooledge.org/ParsingLs)。一种更可靠的计数方法是使用file,例如

printf '%s files' "$(find "$1" -maxdepth 1 -printf . | wc -c)"

,其中find将打印一个“。”对于当前目录中的每个文件,我们都将其计算在内,因为文件名中的特殊字符将不再显示。尽管按照书面规定,find还将计算“隐藏”文件,而ls不会这样做。您可以根据需要消除类似的情况:

printf '%s files' "$(find "$1" -maxdepth 1 -not name '.*' -printf . | wc -c)"