我正在尝试获取起诉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 EltraJoDR0151-populatedDaJaASAA Imagesk0097Qingl
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 EltraJoDR0151-populatedDaJaASAA Imagesk0098Qingl
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 EltraJoDR0151-populatedDaJaASAA Imagesk0097Qingl,13969015
QJ Database EltraJoDR0151-populatedDaJaASAA Imagesk0098Qingl,8348377
这是一个重构,它似乎可以做你想要的。
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。
当您可以简单地使用"du"时,为什么要为此而苦苦挣扎?
du -sh <dir_name>