Solution 1 :
Voir aussi rm sur un répertoire contenant des millions de fichiers ; liés de manière tangentielle, mais nous en discutons ici.
Autant que je sache, au moins sur ext2/3, non, il n'y a aucun moyen (en ligne) de les réduire à court de supprimer + recréer. Non monté, plusieurs sources suggèrent e2fsck -D
pourrait fonctionner, même si je ne peux prétendre aucune expérience personnelle avec cette option.
Quelques références pour aller plus loin :
- http://linux.derkeiler.com/Mailing-Lists/Kernel/2009-05/threads.html#06569
- http://fedoraforum.org/forum/showthread.php?t=120654
Solution 2 :
J'ai récemment dû supprimer et recréer un répertoire NFS pour réduire sa taille après qu'il ait déjà gonflé. Dans le processus, j'ai trouvé un moyen assez efficace de le faire en utilisant rsync et des liens physiques. Cette méthode évite de copier les fichiers réels, tout en atteignant l'objectif de recréer le répertoire avec le même contenu.
Étant donné que nous avions besoin de temps d'arrêt pour effectuer cette opération pendant notre fenêtre de maintenance, il était important pour nous de rendre le répertoire reconstruit disponible dès que possible. Si la simplicité est plus importante pour vous, remplacez la première commande de déplacement par 'rm -rf' sur le répertoire source et ignorez l'autre commande 'rm -rf'.
J'ai extrait ces commandes d'un processus plus large et résumé les noms de répertoires, donc excusez-moi si j'ai fait une erreur dans cette traduction.
mkdir /tmp/holding_dir/
rsync -ai --delete --link-dest=/path/to/source_dir/ /path/to/source_dir/ /tmp/holding_dir/
mv /path/to/source_dir/ /tmp/deleteme/
mv /tmp/holding_dir/ /path/to/source_dir/
Puis plus tard, nous supprimons le répertoire. Selon la taille, vous devrez peut-être utiliser une technique plus sophistiquée pour ce faire. Par exemple, utiliser rsync avec l'indicateur --delete pour synchroniser un répertoire vide dans ce répertoire peut être plus efficace.
rm -rf /tmp/deleteme/
Solution 3 :
Je ferais comme ça.
cp -al
ancien nouveaurépertoire
&&
mv
ancienrépertoire tempname
&&
mv
nouveaurépertoire ancienrépertoire
&&
rm -r
tempname
où ancienrep est le répertoire que vous souhaitez réduirenewdir et tempname sont des noms de fichiers temporaires
cp -al
crée des liens vers le contenu de olddir dans nouveaurépertoire et les trois commandes suivantes les échangent avec newdir et nettoient.