linux - 如何在 bash 中按文件扩展名和大小对目录进行排序

标签 linux bash file unix scripting

我想制作一个脚本,该脚本将按扩展名打印文件夹和子文件夹中的所有文档,计算该文件类型和大小的数量。

    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/

相关文章:

C++ 将字节写入串行流

linux - Htop process viewer - 设置列宽

linux - Bash - 在以句点开头的行上方添加空行

file - 改造分段上传图片失败

linux - 将 cpp make 文件修改为 .c 文件不起作用

linux - 如何在 Bash 中将字符串转换为整数?

linux - Bash 'here document' 字/定界符未加引号

jquery - 如何克隆值输入文件

java - 将文件中的数据加载到 hsqldb 中

Linux 上的 C++ 无法识别 exit() 和 printf() 等命令