使用Bash计算文件

时间:2013-07-28 21:44:03

标签: linux bash unix

我正在尝试将我的函数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

2 个答案:

答案 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