Soluzione 1:
Vedi anche rm su una directory con milioni di file; tangenzialmente correlato, ma ne discutiamo lì.
Per quanto ne so, almeno su ext2/3, no, non esiste un modo (online) per ridurli a meno di eliminare + ricreare. Smontato, diverse fonti suggeriscono e2fsck -D
potrebbe funzionare, anche se non posso rivendicare alcuna esperienza personale con tale opzione.
Alcuni riferimenti per ulteriori letture:
- http://linux.derkeiler.com/Mailing-Lists/Kernel/2009-05/threads.html#06569
- http://fedoraforum.org/forum/showthread.php?t=120654
Soluzione 2:
Di recente ho dovuto eliminare e ricreare una directory NFS per ridurne le dimensioni dopo che si era gonfiata in precedenza. Nel processo, ho trovato un modo abbastanza efficiente per farlo usando rsync e hard link. Questo metodo evita di copiare i file effettivi, pur raggiungendo l'obiettivo di ricreare la directory con gli stessi contenuti.
Poiché avevamo bisogno di tempi di inattività per eseguire questa operazione durante la nostra finestra di manutenzione, per noi era importante rendere disponibile la directory ricostruita il prima possibile. Se la semplicità è più importante per te, cambia il primo comando di spostamento in un 'rm -rf' nella directory di origine e salta l'altro comando 'rm -rf'.
Ho estratto questi comandi da un processo più ampio e ho estratto i nomi delle directory, quindi mi scuso se ho commesso un errore nella traduzione.
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/
Successivamente, rimuoviamo la directory. A seconda delle dimensioni, potrebbe essere necessario utilizzare una tecnica più sofisticata per eseguire questa operazione. Ad esempio, utilizzare rsync con il flag --delete per sincronizzare una directory vuota in questa directory potrebbe essere più efficiente.
rm -rf /tmp/deleteme/
Soluzione 3:
Lo farei così.
cp -al
vecchiodir nuovadir
&&
mv
olddir nometemp
&&
mv
nuovadir olddir
&&
rm -r
nometemp
dove olddir è la directory che vuoi ridurrenuovadir e tempname sono nomi di file temporanei
cp -al
crea collegamenti al contenuto di olddir in nuovadir e i successivi tre comandi scambiali con newdir e pulisci.