获取目录中所选扩展文件的数量和大小

时间:2018-08-25 14:01:11

标签: shell sh

如何仅在文件夹中打印.TXT.csv文件及其可读大小

示例:

file type | total count | total size
.TXT        30            40MB

到目前为止我所做的:

$ find . -type f -name "*.TXT|csv" | wc -l

2 个答案:

答案 0 :(得分:0)

不确定如何在单个命令中执行累积大小+文件计数,但是您可以使用以下命令,将它们分配给变量,然后以所需的表格格式打印出结果。

具有多个扩展名的累积文件大小:

find . -type f -regex '.*\.\(txt\|csv\)' -exec du -ch {} + | grep total$ | cut -f1

单个扩展名的累积文件大小:

find . -type f -name '*.txt' -exec du -ch {} + | grep total$ | cut -f1

具有多个扩展名的文件数:

find -regex '.*\.\(txt\|csv\)' | wc -l

单个扩展名的文件计数:

find . -type f -name "*.txt" | wc -l

答案 1 :(得分:0)

这很粗糙:

找到所有带有扩展名的文件,打印每个文件的字节数和名称:

find . -type f -regex '.*\.\(txt\|csv\)' -exec du -b {} \; |

仅保留字节数和扩展名:

sed -E 's/([0-9]+)\s+.*(\..*)/\1 \2/g' |

使用AWK计算每个扩展的总数和大小(也可以在外壳程序中调用numfmt命令以使其易于理解)并格式化表格:

awk 'BEGIN{print "file type\ttotal count\ttotal size"} {totalSize[$2] += $1; count[$2]++} END {for (ext in count){ "numfmt --to=iec "totalSize[ext] | getline readableSize ;print ext"\t\t"count[ext]"\t\t"readableSize}}'

完整命令:

find . -type f -regex '.*\.\(txt\|csv\)' -exec du -b {} \; | 
sed -E 's/([0-9]+)\s+.*(\..*)/\1 \2/g' | 
awk 'BEGIN{print "file type\ttotal count\ttotal size"} {totalSize[$2] += $1; count[$2]++} END {for (ext in count){ "numfmt --to=iec "totalSize[ext] | getline readableSize ;print ext"\t\t"count[ext]"\t\t"readableSize}}'

输出看起来像这样,如果您搞怪awk打印很容易标准化:

file type   total count total size
gradle      109         89K
txt         2283        680M

话虽这么说,但看到它我感到很脏。这远远超出了Python更易读的地步。