Unix magic, tüm .pyc dosyalarını bir dizin ağacından silmek istiyor musunuz?


11

Tüm .pyc dosyalarını bir dizin ağacından silmenin hızlı bir yolu var mı?

Yanıtlar:


28

GNU bulmanız varsa, muhtemelen

find <directory name> -name '*.pyc' -delete

Taşınabilir bir şeye ihtiyacınız varsa, daha iyi

find <directory name> -name '*.pyc' -exec rm {} \;

Hız büyük bir anlaşma olması durumunda ve GNU find var ve GNU sonra xargs

find <directory name> -name '*.pyc' -print0|xargs -0 -p <some number greater than 1> rm

Bununla birlikte, çoğunlukla G / Ç'de bekleyeceğiniz için, bu kadar hızlanmanız mümkün değildir.


mükemmel teşekkürler. Her zaman unuttuğum xargs
interstar

2
Adlarda boşlukları olan dosyalara sahip olmam durumunda, daima -print0 ve "xargs -0" kullanma alışkanlığına girdim.
Paul Tomblin

Tamamen haklısın, aslında bunu düşünmeliydin., Bunu yansıtacak şekilde düzenlendi.
Cian

4
'-Print0 |' yerine '-delete' komutunu da doğrudan kullanabilirsiniz. xargs -0 rm '. Ancak bu seçeneğin tüm 'find' sürümünde mevcut olmadığı doğrudur.
rolaf

6

find komutunu kullanarak:

find /path/to/start -name '*.pyc' -exec rm -f {} \;

Bu çok yavaş. Xargs kullanmak daha hızlıdır veya find sürümünüz destekliyorsa \;, sondaki " " işaretini " " olarak değiştirin +.
sonraki duyuruya kadar duraklatıldı.

1
Biraz daha yavaş olabilir - her dosya için onları toplulamak yerine bir kez "rm" çalıştırır - ancak bunu yapmanın en taşınabilir yolu budur. OP ne tür bir unix kullandığını söylemedi ve Solaris hala -print0 özelliğine sahip değil.
Kenster

1
+1, OP dedi unix linux değil, bu en iyi taşınabilir çözüm.
theotherreceive

Bence bu çözüm, tonlarca dosyayı kaldırmaya izin veren tek şeydir, eğer xargs kullanarak yanlış değilsem bir komut satırına çok uzun hata bırakabilirsiniz. +1, yıllardan beri benim seçimim.
drAlberT

Projenizi oluşturmak için bir makefile kullanıyorsanız, bunu "temiz" hedefine eklemek isteyebilirsiniz.
Tom Newton

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.