Как может я использовать найти для выбора пользователей с определенным количеством использования дискового пространства?

Я хочу найти всех пользователей показанными в /home/ каталог, дисковое потребление которого составляет больше чем 500 МБ. Следующая команда работает как ожидалось.

cd /home/ && du */ -hs
68K     ajay/
902M    john/
250M    websites/

От вышеупомянутого примера, только 902M john/ должен быть возвращен.

Как я могу сделать find управляйте производит те же результаты?

6
задан 23.05.2011, 21:04

0 ответов

Не уверенный, почему Вы хотите что-то как 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%/} просто удаляет запаздывающую наклонную черту для дополнительной красивости.

4
ответ дан 07.12.2019, 16:20

Это распечатает использование диска (в Кбите) для файлов каждого пользователя в 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. Команда жемчуга добавляет, что использование в хеш включило имя пользователя, таким образом создав сумму размеров файла каждого пользователя; и затем содержание хеша распечатывается.

0
ответ дан 07.12.2019, 16:20

Теги

Похожие вопросы