假设bash 4+(任何受支持的Ubuntu版本都具有):
num_files() (
shopt -s nullglob
cd -P -- "${1-.}" || return
set -- *
echo "$#"
)
称为num_files [dir]
。dir
是可选的,否则它将使用当前目录。您的原始版本不计算隐藏文件,因此也不算。如果需要,请shopt -s dotglob
在之前set -- *
。
您最初的示例不仅计算常规文件,还计算目录和其他设备-如果您确实只希望使用常规文件(包括指向常规文件的符号链接),则需要检查它们:
num_files() (
local count=0
shopt -s nullglob
cd -P -- "${1-.}" || return
for file in *; do
[[ -f $file ]] && let count++
done
echo "$count"
)
如果您有GNU查找,也可以选择类似的方法(请注意,这包括隐藏文件,您的原始命令没有这样做):
num_files() {
find "${1-.}" -maxdepth 1 -type f -printf x | wc -c
}
(更改-type
为-xtype
是否还希望计数到常规文件的符号链接)。