递归列出所有深层子目录中的文件数量

递归列出所有深层子目录中的文件数量

我一直在寻找一种解决方案,可以递归列出每个子目录中的文件数量。有许多解决方案可以给出给定起始目录的每个子目录中的文件数量,但这些解决方案似乎只列出了起始目录的子目录数量,而不是递归地遍历所有子目录的树结构。

例如,

topdir1

sublevelA1 10 个文件

  sublevelA2    200 files  

     sublevelA3 600 files  

sublevelB1 50 个文件

  sublevelB2    123 files  

     sublevelB3 357 files  

我尝试过的解决方案只会给我两行内容,分别表示 sublevelA1 810 文件和 sublevelB1 530 文件。

我想要一个解决方案,可以给出上面的 6 行。不需要缩进。

答案1

你可以做这样的事情:

find path/to/topdir1/ -type d -exec sh -c '
  d="$1"; set -- "$d"/*; printf "%s: %d files\n" "$d" "$#"
' sh {} \;

这将打印子目录的完整路径 - 如果您想要不合格的目录名称,请更改-exec-execdir。它将在文件计数中包含目录。

另一种方法可能是使用递归 shell 函数 - 但请注意,这将执行深度优先搜索,因此结果的顺序可能不是您所期望的:

#!/bin/sh

_countrecurse() {
  local c=0;
  for f in "$1"/*; do
    if [ -d "$f" ]; then
      _countrecurse "$f";
    else
      c=$(($c+1))
    fi
  done
  printf '%s: %d files\n' "$1" "$c"
}

_countrecurse "$1"

使用

./countrecurse path/to/topdir1/

这会不是将目录包含在文件计数中。

相关内容