Birçok (200 000) dosya nasıl kaldırılır?


17

Bir klasörden 200.000 dosyayı (tümünü) kaldırmalıyım ve klasörün kendisini silmek istemiyorum.

rm kullanarak, "Bağımsız değişken listesi çok uzun" hatası alıyorum. Ben xargs ile bir şey yapmaya çalıştım, ama ben bir Shell Guy değilim, bu yüzden işe yaramaz:

find -name * | xargs rm -f

5
Silme işleminden sonra klasörü neden silmiyor ve yeniden oluşturmuyorsunuz?
garconcn

Yanıtlar:


35
$ find /path/to/folder -type f -delete

15
Muhtemelen GNU bulmanın (çoğu Linux dağıtımı tarafından kullanıldığı gibi) dosyaları kendi başlarına silebildiğini belirtmek gerekir -delete. Bu aynı zamanda tırnak işaretleri veya satırsonu karakterleri içeren dosyalar ile ilgili sorunları da önler (ancak bunu düzeltmek için GNU bul -print0ve GNU xarg -0seçeneklerini kullanabilirsiniz).
DerfK

3
@DerfK, güzel açıklama! Ayrıca, çok sayıda ppl ile oyuna eğilimindedir xargsarada findsahiptir -exec command {} +sözdizimi.
poige

5

Her şeyi doğru yapıyorsun. Öyle '*' size bir sorun verir (kabuk yerine dosyaların listesini içine genişlemektedir find). Doğru sözdizimi şunlar olabilir:

cd <your_directory>; find . -type f | xargs rm -f
find <your_directory> -type f | xargs rm -f

(İkincisi biraz daha az verimlidir çünkü daha uzun isimler geçirecektir xargs, ancak neredeyse hiç fark etmeyeceksiniz :-))

Alternatif olarak, '*' öğenizden böyle kaçabilirsiniz (ancak bu durumda "." Ve ".." 'yı da kaldırmayı deneyecektir; bu bir biggie değil - sadece küçük bir uyarı alacaksınız :-)):

find . -name '*' | xargs rm -f
find . -name "*" | xargs rm -f
find . -name \* | xargs rm -f

Dosya adlarınız boşluk içeriyorsa şunu kullanın:

find . -type f -print0 | xargs -0 rm -f

1
Boşluk içeren bir dosya adınız varsa bu çalışmaz.
user9517

@lain: Evet, sadece beyaz boşluklar için hileyi dahil etmek için cevabımı düzenleme sürecindeydim :-)
dtoubelis

3

Aşağıdaki komut, geçerli dizindeki tüm dosyaları siler :

find . -type f -exec rm {} \;

2
-name '*'"tüm dosyalar" anlamına gelmez. Dosyalar şu şekilde söylenir:-type f
poige

2

deneyebilirsin

find /path/to/folder -type f -print0  | xargs -0 rm -f

veya

find /path/to/folder -type f -exec rm -f "{}" +

1

Kuantas'a şükran cevabı, bazı eklemeler.

Belirli bir ad desenine sahip dosyaları silmek isterseniz, bu şekilde yazabilirsiniz. Ayrıca -print eklendi, böylece dosyalar silinirken neler olduğunu görebilirsiniz.

sudo find /home/mydirectory -name "*.jpg" -type f -print -delete

Bu, mydirectory içindeki tüm jpeg'leri siler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.