Этот однострочный текст поможет:
tar tzvf /tmp/root.tgz | sed 's/ \+/ /g' | cut -f3,6- -d' ' | cut -f1 -d'/' | awk '{
arr[$2]+=$1
}
END {
for (key in arr) printf("%s\t%s\n", key, arr[key])
}'
Пример вывода:
usr 821233945
boot 11150620
Объяснение:
tar tzvf filename
- перечисляет всефайлы в архиве в стиле ll -r
sed
сжимают несколько пробелов в один, чтобы помочь вырезать - first
cut
, обрезает третье и шестое поля и оставляет все после шестого поля без изменений,учитывая, что разделителем является пробел - теперь у нас есть размер в первом столбце и путь к файлу во втором столбце - second
cut
: поскольку нам нужны только записи верхнего уровня, мы обрезаем первый разделитель каталогов - только первыйполе, учитывая /
- разделитель awk
используется для группировки по второму полю, суммируя первое