我想制作一个脚本,该脚本将按扩展名打印文件夹和子文件夹中的所有文档,计算该文件类型和大小的数量。
Example:
file type | total count | total size
pdf 30 4.0k
txt 90 60.0k
类似的东西。除了尺寸部分,我已经能够弄清楚如何做到这一点。有什么建议么?
最佳答案
find . -type f -print0 | xargs -0 du -k | grep "\.[a-zA-Z]*$" | rev | sed -e "s/\..*\t/\t/g" | rev | awk '{SUM[$2]=+$1} END{for (x in SUM) print x,SUM[x]}' | sort
解释
find . -type f -print0
查找子目录中的所有文件并打印它们,以空字符 (somefile.abc
) 分隔
| xargs -0 du -k
对于每个文件,它以千字节为单位打印大小 (12<TAB>somefile.abc
)
| grep "\.[a-zA-Z0-9]*$"
仅选择以点和一些扩展名 ( 12<TAB>somefile.abc
) 结尾的文件
| rev
按字符反转每一行(cba.elifemos<TAB>21
)
| sed -e "s/\..*\t/\t/g"
删除点和 ( cba<TAB>21
) 之间的所有字符
| rev
按字符反转每一行(12<TAB>abc
)
| awk '{SUM[$2]=+$1} END{for (x in SUM) print x,SUM[x]}'
根据分机求和
关于linux - 如何在 bash 中按文件扩展名和大小对目录进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28376003/