按文件数量排序

可以使用 find 命令和 wc 命令结合起来,在管道中使用 sort 命令对输出的结果进行排序。具体的命令如下所示:

find . -maxdepth 1 -type d -exec sh -c 'echo -n "{} "; ls -1 "{}" | wc -l' \; | sort -k2 -n

这个命令会输出所有子目录的文件数目,并按照文件数目从小到大进行排序。在这个命令中,find . -maxdepth 1 -type d -exec sh -c 'echo -n "{} "; ls -1 "{}" | wc -l' \; 会输出所有子目录的名称和文件数目,其中 echo -n "{} " 将子目录名称输出, ls -1 "{}" | wc -l 统计子目录下面的文件数目并输出,在这之后将结果排序。sort -k2 -n 表示按照输出结果的第二个字段进行排序(即按照文件数目进行排序),并指定排序方式为数字排序(一般情况下,这个参数可有可无,因为 sort 命令默认会进行数字排序,但是在特殊情况下需要特别指定)。排序后,输出结果的格式为:

./dir1 num_files_in_dir1
./dir3 num_files_in_dir3
./dir2 num_files_in_dir2
...

需要注意的是,这个命令同样会包括当前目录在内。如果只想要查看子目录的文件数目,可以将 -maxdepth 1 去掉,这样就会包含子目录的子目录在内。如果想要将结果写入文件,可以将整个命令用 >> 输出重定向符重定向到文件中。

按文件夹名称排序

可以将之前的命令进行组合,使用 find 命令和 wc 命令结合起来,然后在管道中使用 sort 命令对输出的结果按照文件夹名称从小到大排序。具体的命令如下所示:

find . -maxdepth 1 -type d -printf "%f
" | sort | while read -r dir; do echo -n "$dir "; find "$dir" -type f | wc -l; done

这个命令会输出所有子目录的名称和文件数目,并按照名称从小到大进行排序。在这个命令中,find . -maxdepth 1 -type d -printf "%f " 会输出所有子目录的名称,其中 -printf "%f " 指定输出目录名而不包括父路径(如:./dir1 输出为 dir1)。sort 命令按照目录名称从小到大进行排序,排序后,输出结果的格式为:

dir1 num_files_in_dir1
dir2 num_files_in_dir2
dir3 num_files_in_dir3
...

在这个命令中,while read -r dir; do echo -n "$dir "; find "$dir" -type f | wc -l; done 循环遍历每一个子目录,输出它的名称和文件数目,其中 find "$dir" -type f 会输出指定目录下的所有文件,wc -l 统计文件数目。while read -r 会防止在空格或换行符处断开行。最终的输出结果会按照目录名称从小到大排列。