如何使用AWK获取文件夹的大小?

时间:2019-02-01 06:31:13

标签: shell awk

我正在尝试使用AWK获取所有路径和文件夹的总大小; 我的第一种方法是使用此脚本:

BEGIN { OFS=" " }
sub(/^\\/,"/") { path = $0; next }
path == "" { next }
match($0,/^(.*[^ ]) +A +([^ ]+) +(.*)/,a) { print substr(path,2) "\\ " a[2] }

但这为我提供了文件夹中每个文件的大小路径,而不是文件夹的总数,因此我认为需要使用 sum

这是我的输入:

README.txt         A  45  Mon Aug 30 18:50:16 2018        
Test Cases.xlsx         A  1415577  Wed Aug 29 14:00:16 2018
\Qt Database EltraJo\DR0151-populated\DaJa\ASAA Images\k0097\Qingl
R0097A+05.00B-00-QingL.JPG          A  6958377  Fri Jun  8 12:53:30 2018
R0097A+05.00B-00-QingLI.JPG         A  2794933  Fri Jun  8 12:53:30 2018
R0097A-00.00B-00-QingLI.JPG         A  2825705  Fri Jun  8 12:53:30 2018
R0097A-00.00B-00-QingLO.JPG         A  1369520  Fri Jun  8 12:53:30 2018
Thumbs.db                           A    20480  13969015Fri Jun  8 13:14:41 2018
\QJ Database EltraJo\DR0151-populated\DaJa\ASAA Images\k0098\Qingl
R0098A+05.00B-00-QingL.JPG          A  6958377  Fri Jun  8 12:54:30 2018
R0098A-00.00B-00-QingLO.JPG         A  1369520  Fri Jun  8 12:54:30 2018
Thumbs.db                           A    20480  Fri Jun  8 13:14:41 2018

我的输出应该是这样的:

\Qt Database EltraJo\DR0151-populated\DaJa\ASAA Images\k0097\Qingl,13969015 
\QJ Database EltraJo\DR0151-populated\DaJa\ASAA Images\k0098\Qingl,8348377 

2 个答案:

答案 0 :(得分:2)

这是一个重构,它似乎可以满足您的要求。

BEGIN { OFS="," }
/^\\/ { if(path) print path, sum; path = $0; sum = 0; next }
path == "" { next }
match($0,/^(.*[^ ]) +A +([^ ]+) +(.*)/,a) { sum+= a[2] }
END { if(path) print path, sum }'

诀窍是收集事物并在完成收集后打印结果。 (一个常见的初学者错误是忘记打印上一个集合。第二次在END中使用相同的代码有些不妥,如果更复杂,我可以将其放在函数中。)

您似乎想要逗号分隔的输出,因此我们为此设置了OFS

三个参数match()需要GNU Awk。

答案 1 :(得分:0)

为什么只需使用“ du”就为此而苦于“ awk”?

du -sh <dir_name>