我正在尝试将我的函数inspect_files保持为单一责任原则,我知道我可以很容易地计算出该函数内部的文件数并将其打印在那里,但是有更优雅的解决方案来计算文件吗?
(注意,我不想要递归文件计数。)
# Snippet:
dir_name="$HOME/$1"
inspect_files() {
local content
for content in "$dir_name"/*; do
printf "%s\n" "${content##*/}"
done
count_files "$dir_name"
}
count_files() {
local count
local dir="$1"
count=$(ls -1 "$dir_name" | wc -l)
printf "\nTotal: %d\n" "$count"
}
if is_found "$dir_name"; then
inspect_files
else
echo 'Not a directory.'
fi
答案 0 :(得分:1)
怎么样:
list_and_count_files()
{
local content
local count
count=0
for content in "${1:-.}"/*; do
printf "%s\n" "${content##*/}"
((count++))
done
printf "\nTotal: %d\n" "$count"
}
此名称更准确地描述了您的原始功能。请注意,要分析的目录作为参数传递给函数,但如果未传递任何内容,则默认为.
(当前目录)。这将函数与变量$dir_name
分离,这对于隔离来说要好得多。
答案 1 :(得分:0)
下一个功能:
inspect_files() {
find "$1/" -type f -maxdepth 1 -print0 | grep -zc .
}
返回给定目标中的普通文件计数,例如:
tmpcount=$(inspect_files /tmp)
echo "File count in /tmp is: $tmpcount"
如果您想要计算所有内容(不仅仅是纯文件),请使用simlper:
inspect_files() {
find "$1/" -maxdepth 1 -print0 | grep -zc .
}
"$1/"
之后的斜杠确保您在目录中计算符号链接,例如
$ ls -ld /tmp
lrwxr-xr-x@ 1 root wheel 11 27 jul 2012 /tmp -> private/tmp