按文件数量排序
可以使用 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
会防止在空格或换行符处断开行。最终的输出结果会按照目录名称从小到大排列。