按类型和大小对文件夹及其子文件夹中的文件进行排序

Sort files in a folder and its subfolders by type and size

我必须按扩展名递归地计算目录和子目录中的大量文件,并获得每个扩展名的总大小。

我不想看到旁边有类型和大小的单个文件。

例如,这可能是一个输出:

JPEG - 123 Files - 321MB Total;
AVI - 321 Files - 123MB Total;
MP4 - 111 Files - 111MB Total;

我试过使用 ls -lshR,然后将结果通过管道传输到 grep,但由于环境的限制,我无法创建脚本文件来解析结果正在工作。我坚持在单个命令中实际计算和总计 ls -lshR | grep ".txt" 结果的大小。

您可以进一步简化评论的解决方案,

 find /boo -ls \
 | awk '/.*\.txt/{txtTot+=}; /.*\.mp4/{mp4Tot+=} END {print "Txt Tot=" txtTot "\nMP4 Tot=" mp4Tot}'

这会获取 /boo 下的所有文件,awk /.*\.txt/ 等都是正则表达式,只匹配带有 .txt 的行。 .mp4 也一样。根据需要继续添加。处理过程中将跳过您不关心的任何内容。

(您的 find 可能会将文件大小放在不同的字段 num 中,只需查看输出并根据需要更改对 $6 的引用)。

接下来就是使用 awk 数组按类型动态地总计文件大小,但在您担心之前,请阅读更多关于 awk 的内容。

(我现在没有办法测试这个,所以可能还剩下一些小的语法问题。根据 awk 的版本,您可能会收到有用的错误消息;-/)

IHTH