С GNUfind
:
find. -printf '%D+%i:%u:%b\n' | awk -F: '
!seen[$1]++ {du[$2] += $3}
END {for (user in du) printf "%20s: %lu\n", user, du[user] * 512}'
Это будет сообщать об использовании диска в байтах для каждого пользователя. Как и в du
, он старается не считать жесткие ссылки несколько раз.
find
печатает номер устройства+inode(%D+%i
)для каждого файла (для жестких ссылок на один и тот же файл, они будут идентичны ), имя пользователя и использование диска в количестве 512 -байтовых единиц.
:
используется в качестве разделителя полей, поскольку имена пользователей обычно не содержат их, поскольку они являются разделителем полей в пользовательской базе данных (, например /etc/passwd
или выводомgetent passwd
).
Этот список передается в awk
, где мы обновляем du
ассоциативный массив, индексированный по имени пользователя($2
второе поле )для каждого из файлов, для которых первое поле еще не seen
.
В END
мы перебираем элементы ассоциативного массива, чтобы сообщить о совокупном использовании диска для каждого пользователя (, умножая количество блоков , чтобы получить информацию в байтах ).