如何统计所有子目录中的文件总数?

如何统计所有子目录中的文件总数?

我有一个名为的目录/data/,其中包含两个子目录:/data/train//data/test/train每个test子目录包含101子目录( 中的 101 个目录train和 中的 101 个test)。

这些目录包含 jpeg 图像。我想要循环遍历所有目录以:

  1. 计算图像总数
  2. 统计每个目录中包含的图像数量

答案1

阅读man find,并做一些类似的事情

find /data/train /data/test -type f -print | wc -l

for dirname in $(find /data/train /data/test -type d -print) ; do
    /bin/echo -e -n "$dirname\t"
    find $dirname -type f -print | wc -l
done

答案2

Python 已经内置了适合此类工作的实用程序。一行代码即可完成:

$ python -u -c 'from os import walk,path; print "\n".join([str(len(f)) +" "+r for r,d,f in walk(".")])'

或者按照如下脚本:

#!/usr/bin/env python
import os
import sys
for root,dirs,files in os.walk(sys.argv[1]):
    print(root,len(files))

请注意,在脚本版本中,您需要使用目录作为位置参数来调用脚本:

$ ./count_files.py my_dir/

答案3

bash

for dir in /data/*/; do
    files=( "$dir"/*/* )
    printf "%s\t%s\n" "$dir:" "${#files[@]}"
done

输出结果如下:

/data/test:     5432
/data/train:    1234

相关内容