Solución 1:
Consulte también rm en un directorio con millones de archivos; relacionado tangencialmente, pero lo discutimos allí.
Hasta donde yo sé, al menos en ext2/3, no, no hay forma (en línea) de reducirlos antes de eliminar + recrear. Sin montar, varias fuentes sugieren e2fsck -D
podría funcionar, aunque no puedo reclamar experiencia personal con esa opción.
Algunas referencias para lecturas adicionales:
- http://linux.derkeiler.com/Mailing-Lists/Kernel/2009-05/threads.html#06569
- http://fedoraforum.org/forum/showthread.php?t=120654
Solución 2:
Recientemente tuve que eliminar y volver a crear un directorio NFS para reducir su tamaño después de que se había inflado previamente. En el proceso, encontré una forma bastante eficiente de hacer esto usando rsync y enlaces duros. Este método evita copiar los archivos reales, al mismo tiempo que logra el objetivo de recrear el directorio con el mismo contenido.
Dado que necesitábamos tomar tiempo de inactividad para realizar esta operación durante nuestra ventana de mantenimiento, era importante para nosotros que el directorio reconstruido estuviera disponible lo antes posible. Si la simplicidad es más importante para usted, cambie el primer comando de movimiento a 'rm -rf' en el directorio de origen y omita el otro comando 'rm -rf'.
Extraje estos comandos de un proceso más grande y resumí los nombres de los directorios, así que pido disculpas si cometí un error en esa traducción.
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/
Luego, más tarde, eliminamos el directorio. Dependiendo del tamaño, es posible que deba usar una técnica más sofisticada para hacer esto. Por ejemplo, usar rsync con el indicador --delete para sincronizar un directorio vacío en este directorio puede ser más eficiente.
rm -rf /tmp/deleteme/
Solución 3:
Yo lo haría así.
cp -al
antiguo nuevodir
&&
mv
dirección antigua nombre temporal
&&
mv
nuevodir dirección antigua
&&
rm -r
nombre temporal
donde olddir es el directorio que desea reducir newdir y nombre temporal son nombres de archivos temporales
cp -al
crea enlaces al contenido de olddir en nuevodir y los siguientes tres comandos los intercambian con newdir y limpian.