Я хочу найти всех пользователей показанными в /home/
каталог, дисковое потребление которого составляет больше чем 500 МБ. Следующая команда работает как ожидалось.
cd /home/ && du */ -hs
68K ajay/
902M john/
250M websites/
От вышеупомянутого примера, только 902M john/
должен быть возвращен.
Как я могу сделать find
управляйте производит те же результаты?
Не уверенный, почему Вы хотите что-то как find
, таким образом, вот scriptlet, который делает то, в чем Вы спрашиваете bash
(но не работает как находка):
max_size=$((500*1024))
cd /home/ && du -ks */ | while read size user ; do
if [ $size -gt $max_size ] ; then
echo "${user%/} exceeds quota"
fi
done
Пример: (с меньшим размером):
$ du -sk */
2948 a/
4 a b/
640 b/
48 qt/
$ du -ks */ | while read size user ; do if [ $size -gt 600 ] ; then echo "${user%/} exceeds quota" ; fi ; done
a exceeds quota
b exceeds quota
${user%/}
просто удаляет запаздывающую наклонную черту для дополнительной красивости.
Это распечатает использование диска (в Кбите) для файлов каждого пользователя в dir
независимо от того, где те файлы:
find dir -printf "%u %b\n" | perl -n -e '@l = split; $sum{$l[0]} += $l[1]; END { foreach(sort(keys(%sum))) { print "$_ ",$sum{$_}/2," KiB\n"; }}'
Команда находки печатает владельца и количество блока каждого файла и каталога в dir
. Команда жемчуга добавляет, что использование в хеш включило имя пользователя, таким образом создав сумму размеров файла каждого пользователя; и затем содержание хеша распечатывается.