Bir kerede çok sayıda dosyayı silmeye çalışıyorsanız (bugün 485.000'den fazla bir dizini sildim), muhtemelen bu hatayla karşılaşacaksınız:
/bin/rm: Argument list too long.
Sorun bir şey gibi yazarken yani rm -rf *
, *
“rm-rf dosya1 dosya2 dosya3 file4” ve benzeri gibi her eşleşen dosya listesi ile değiştirilir. Bu argüman listesini saklamak için ayrılmış küçük bir bellek tamponu vardır ve doldurulursa, kabuk programı yürütmez.
Bu sorunu aşmak için, birçok kişi her dosyayı bulmak için find komutunu kullanacak ve bunları tek tek “rm” komutuna aşağıdaki gibi aktaracaktır:
find . -type f -exec rm -v {} \;
Benim sorunum 500.000 dosyayı silmem gerekti ve çok uzun sürüyordu.
Dosyaları silmenin çok daha hızlı bir yoluna rastladım - “find” komutunun içinde “-delete” bayrağı var! İşte ben kullanarak sona erdi:
find . -type f -delete
Bu yöntemi kullanarak, dosyaları yaklaşık 2000 dosya / saniye hızında siliyordum - çok daha hızlı!
Dosya adlarını silerken de gösterebilirsiniz:
find . -type f -print -delete
… Ya da kaç dosyanın silineceğini, daha sonra bunların silinmesinin ne kadar süreceğini gösterin:
root@devel# ls -1 | wc -l && time find . -type f -delete
100000
real 0m3.660s
user 0m0.036s
sys 0m0.552s