Как сжать каталог

21

Время от времени, какое-то приложение запускается вхолостую и заполняет каталог огромным количеством файлов. Как только мы исправим ошибку и очистим файлы, каталог останется большим (> 50 МБ), хотя в нем всего 20-30 файлов.

Есть ли какая-нибудь команда, которая сжимает каталог, не создавая его заново?

Бонусные баллы: огромный пустой каталог влияет на производительность доступа к этому каталогу? Я предполагаю, что это так, но, возможно, это не стоит беспокоиться. Кажется, медленнее делать lsв таком каталоге.

Матье Лонгтин
источник
Я не думаю, что есть такая вещь (но я, конечно, могу быть совершенно не прав). Может быть, некоторые инструменты для конкретной файловой системы - какую FS вы используете?
Мат
ext3, но я видел эту проблему на большинстве файловых систем, с которыми я сталкивался в мире Unix. Я тоже не думаю, что есть такой инструмент, но я бы хотел оказаться неправым.
Матье Лонгтин
4
Я отметил ваш вопрос "ext3", так как этот вопрос очень специфичен для файловой системы. Я не знаю ответа для ext3 (я подозреваю, что вам нужно пересоздать каталог, чтобы уменьшить его), но пытались ли вы форсировать fsck? У ext3 fsckесть проход «Оптимизирующий каталог». Я не знаю, что это делает, но, может быть, это сокращает слишком большие каталоги? В любом случае, как точка данных FWIW, xfs автоматически сжимает каталоги, из которых были удалены файлы.
Селада
Вы случайно удалили открытые файлы?
Карлсон
1
UFS на BSD и Mac HFS также сокращают каталоги на лету. Я удивлен, узнав, что ext3 нет. ext4, похоже, тоже этого не делает.
Кайл Джонс

Ответы:

10

Вы работаете e2fsck -Dв размонтированной файловой системе.

psusi
источник
1
Я надеялся на что-то менее разрушительное.
Матье Лонгтин
1
@MathieuLongtin, вы также можете переместить все в новый каталог, удалить старый и переименовать новый обратно.
Псуси
Я знал об этом приеме, но он может испортить процессы, используя каталог в качестве текущего рабочего каталога.
Матье Лонгтин