Řešení 1:
Viz také rm o adresáři s miliony souborů; tečně souvisí, ale tam o tom diskutujeme.
Pokud je mi známo, alespoň na ext2/3, ne, neexistuje žádný (online) způsob, jak je zmenšit tak, aby nebylo možné odstranit + znovu vytvořit. Odpojeno, několik zdrojů navrhuje e2fsck -D
může fungovat, i když nemohu tvrdit, že s touto možností nemám osobní zkušenost.
Některé odkazy pro další čtení:
- http://linux.derkeiler.com/Mailing-Lists/Kernel/2009-05/threads.html#06569
- http://fedoraforum.org/forum/showthread.php?t=120654
Řešení 2:
Nedávno jsem musel smazat a znovu vytvořit adresář NFS, abych zmenšil jeho velikost poté, co se předtím nafoukl. V tomto procesu jsem našel poměrně efektivní způsob, jak toho dosáhnout pomocí rsync a pevných odkazů. Tato metoda se vyhýbá kopírování skutečných souborů, přičemž stále dosahuje cíle znovu vytvořit adresář se stejným obsahem.
Vzhledem k tomu, že jsme během období údržby potřebovali provést tuto operaci, bylo pro nás důležité co nejdříve zpřístupnit přestavěný adresář. Pokud je pro vás důležitější jednoduchost, změňte první příkaz pro přesun na 'rm -rf' ve zdrojovém adresáři a přeskočte druhý příkaz 'rm -rf'.
Tyto příkazy jsem extrahoval z většího procesu a abstrahoval názvy adresářů, takže se omlouvám, pokud jsem v překladu udělal chybu.
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/
Později adresář odstraníme. V závislosti na velikosti k tomu možná budete muset použít sofistikovanější techniku. Například použití rsync s příznakem --delete k synchronizaci prázdného adresáře do tohoto adresáře může být efektivnější.
rm -rf /tmp/deleteme/
Řešení 3:
Udělal bych to takhle.
cp -al
oldir newdir
&&
mv
olddir tempname
&&
mv
newdir olddir
&&
rm -r
tempname
kde olddir je adresář, který chcete zmenšitnewdir a tempname jsou dočasné názvy souborů
cp -al
vytváří odkazy na obsah olddir v newdir a další tři příkazy je zamění za newdir a uklidí.