Я неправильно понял этот вопрос и подумал, что он спрашивает что-то, что мне нужно в течение длительного времени. У меня вопрос немного другой: как найти каталоги, содержимое которых превышает определенный размер. Есть ли какой-нибудь * nix способ сделать это?
3 ответа
find
не смотрит на совокупный размер подкаталогов. Вместо этого используйте du
с параметром -s
чтобы он печатал только общий размер каждого каталога, указанного в командной строке:
du -s *|awk '{ if ($1 > 3000) print }'
даст вам вывод, как:
3124 foo
10025 bar
или, чтобы напечатать только имена:
du -s *|awk '{ if ($1 > 3000) print $2 }'
Находит find . -type d -size +3k -print
делать то, что вы просите? Измените "3k" на любой размер, конечно.
Пара расширений на ответ Питера Вестлейка:
Опция --max-глубина может использоваться для ограничения глубины поиска подкаталогов. В приведенном ниже примере поиск осуществляется на 2 уровнях.
Вы можете использовать опцию -B для du, чтобы установить размер блока для вывода du. В следующем примере размер каталога составляет килобайт (здесь 1000 байтов). На данный момент вы можете использовать опции -k (килобайт) и -m (мегабайт), но человек говорит мне, что они устарели, поэтому я бы порекомендовал вам их избегать. (В противном случае вы окажетесь в ситуации, в которой я могу оказаться - в привычке использовать их и расстроиться, когда они уйдут!)
$ du --max-глубина = 2 -B 1000 | awk '{if ($ 1> = 5) print $ 0};'
Еще один момент: если вы хотите, чтобы выходные данные были отсортированы по размеру каталога, направьте его через sort -n, который отсортирует выходные данные численно (-n) и по умолчанию использует первый столбец (размер каталога).