Comment compacter un répertoire

21

De temps en temps, certaines applications s'exécutent de manière sauvage et remplissent un répertoire avec une énorme quantité de fichiers. Une fois que nous avons corrigé le bogue et nettoyé les fichiers, le répertoire reste volumineux (> 50 Mo) même s'il ne contient que 20 à 30 fichiers.

Existe-t-il une commande qui compacte un répertoire sans avoir à le recréer?

Points bonus: un énorme répertoire vide affecte-t-il les performances d'accès de ce répertoire? Je suppose que oui, mais cela ne vaut peut-être pas la peine. Cela semble plus lent à faire lssur un tel répertoire.

Mathieu Longtin
la source
Je ne pense pas qu'il y ait une telle chose (mais je pourrais bien sûr me tromper complètement). Peut-être que certains outils spécifiques au système de fichiers - quel FS utilisez-vous?
Mat
ext3, mais j'ai vu ce problème sur la plupart des systèmes de fichiers que j'ai traités dans le monde Unix. Je ne pense pas non plus qu'il existe un tel outil, mais j'aimerais avoir tort.
Mathieu Longtin
4
J'ai marqué votre question "ext3" car cette question est très spécifique au système de fichiers. Je ne connais pas la réponse pour ext3 (je soupçonne que vous devez recréer le répertoire pour le réduire) mais avez-vous essayé de forcer un fsck? ext3 fscka une passe "Optimizing directory". Je ne sais pas ce que cela fait, mais peut-être que cela réduit les répertoires qui sont trop gros? Quoi qu'il en soit, en tant que point de données FWIW, xfs rétrécit automatiquement les répertoires dont les fichiers ont été supprimés.
Celada
Avez-vous par hasard supprimé des fichiers ouverts?
Karlson
1
ufs sur les BSD et Mac HFS réduisent également les répertoires à la volée. Je suis surpris d'apprendre que ext3 ne fonctionne pas. ext4 ne semble pas le faire non plus.
Kyle Jones

Réponses:

10

Vous exécutez e2fsck -Dsur le système de fichiers non monté.

psusi
la source
1
J'espérais quelque chose de moins perturbateur.
Mathieu Longtin
1
@MathieuLongtin, vous pouvez également tout déplacer vers un nouveau répertoire, supprimer l'ancien et renommer le nouveau.
psusi
Je connaissais cette astuce, mais elle peut perturber les processus en utilisant le répertoire comme répertoire de travail actuel.
Mathieu Longtin