3

Я неправильно понял этот вопрос и подумал, что он спрашивает что-то, что мне нужно в течение длительного времени. У меня вопрос немного другой: как найти каталоги, содержимое которых превышает определенный размер. Есть ли какой-нибудь * nix способ сделать это?

3 ответа3

6

find не смотрит на совокупный размер подкаталогов. Вместо этого используйте du с параметром -s чтобы он печатал только общий размер каждого каталога, указанного в командной строке:

du -s *|awk '{ if ($1 > 3000) print }'

даст вам вывод, как:

3124    foo
10025   bar

или, чтобы напечатать только имена:

du -s *|awk '{ if ($1 > 3000) print $2 }'
1

Находит find . -type d -size +3k -print делать то, что вы просите? Измените "3k" на любой размер, конечно.

1

Пара расширений на ответ Питера Вестлейка:

  • Опция --max-глубина может использоваться для ограничения глубины поиска подкаталогов. В приведенном ниже примере поиск осуществляется на 2 уровнях.

  • Вы можете использовать опцию -B для du, чтобы установить размер блока для вывода du. В следующем примере размер каталога составляет килобайт (здесь 1000 байтов). На данный момент вы можете использовать опции -k (килобайт) и -m (мегабайт), но человек говорит мне, что они устарели, поэтому я бы порекомендовал вам их избегать. (В противном случае вы окажетесь в ситуации, в которой я могу оказаться - в привычке использовать их и расстроиться, когда они уйдут!)

    $ du --max-глубина = 2 -B 1000 | awk '{if ($ 1> = 5) print $ 0};'

Еще один момент: если вы хотите, чтобы выходные данные были отсортированы по размеру каталога, направьте его через sort -n, который отсортирует выходные данные численно (-n) и по умолчанию использует первый столбец (размер каталога).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .