统计目录列表中的文件数量

统计目录列表中的文件数量

我有一个包含目录列表的文件,我想知道每个目录中有多少个文件。

.../图像/idsuffix/用户ID/

这将给我前 5 个目录而不是每个目录的文件和目录的数量。

查找 ./images/00{0..5}/ | wc

我想要的是每个目录的内容计数。我尝试将其传递给 xargs,但结果相同,并生成所有目录的计数。

ls ./images/ > directories.lst  
cat directories.lst | xargs -i{} find {} | wc 

这根本不产生任何输出。

cat directories.lst | xargs -I{} bash -s "find {} | wc"

答案1

您可以使用 for 循环:

for dir in ./images/* ; do echo $dir ; ls "$dir" | wc ; done

如果您也希望包含点文件,请使用ls -a

如果您也想计算点目录中的文件数量,请使用for dir in ./images/* ./images/.*

如果有一些非目录,可以添加测试:

for dir in ./images/* ; do
    if [[ -d $dir ]] ; then
        echo $dir
        ls "$dir" | wc
    fi
done

答案2

如果您想从文件中读取目录列表,请执行以下操作:

   $ for dir in $(cat directories.lst); do echo "$dir : `ls $dir | wc -l`"; done

但是,您不需要该文件:

   $ for dir in $(find images/ -type d); do echo "$dir : `ls $dir | wc -l`"; done

如果你只想要顶级目录:

   $ for dir in $(find images/ -maxdepth 1 -type d); do echo "$dir : `ls $dir | wc -l`"; done

最后,如果文件名中有空格,请执行以下操作:

   $ SAVEIFS=$IFS; IFS=$(echo -en "\n\b"); for dir in $(find images/ -type d); do echo "$dir : `ls $dir | wc -l`"; done; IFS=SAVEIFS

答案3

在命令的 -exec 部分使用 sh,您可以启动另一个 shell 并在其中顺利运行命令。

查找 . -name "*.dat" -exec csh -c ‘echo -n $1; grep ID $1 | wc -l’ {} {} \;

或者在我的情况下,当计算目录中的文件数时。我使用“ls -f”,因为它会产生未排序的 ls 输出,这比在计算之前尝试对输出进行排序要快得多。

目录名称和目录数之间有换行符

查找 /somedir/some/dir -type d -print -exec sh -c ' ls -f $1/* | wc -l' {} {} \;

输出如下所示

/目录/somedir/002/1066002
6

目录名称和计数之间用制表符分隔

查找 /somedir/some/dir -type d -exec bash -c'echo -en“$1\t”; ls -f $1/* | wc -l'{} {} \;

输出如下所示

/目录/somedir/002/1066002 6

http://www.compuspec.net/reference/os/solaris/find/find_and_execute_with_pipe.shtml

相关内容