2009-10-19 9 views
11

Xargs ile kullanma bash - bu durumda, bu kadar yerleşik eski vmware günlük dosyaları hepsi. Ben komutu çalıştırdığınızdaShell Scripting: Belirli bir desen eşleştirme tüm dosyaları silecektir bash komutunu yazmaya çalışıyorum

find . -name vmware-*.log | xargs rm 

Ancak, isimleri boşluklar olan klasörlerin tümü üzerinde bobinleri:

ben bu komutu denedim. Dosya yolunu biçimlendirmenin bir yolu var mı, böylece xargs rm alıntılandı mı yoksa düzgün kaçtı mı?

+0

Çapraz yayınlanmıştır: http://serverfault.com/questions/76031/shell-scripting-using-find-to-delete-files-matching-a-pattern –

cevap

24

kullanmayı deneyin:

find . -name vmware-*.log -print0 | xargs -0 rm 

Bu çıkışa her dosya sonra bir boş karakter bulmak neden olur ve bunun yerine boşluk ya da diğer jeton boş karakterler dayalı isimleri kırmaya xargs söyler.

5

xargs için -0 bayrak dışarı Kontrol; find 'ın -print0 sen ayarlanmalıdır ile birleştirdi.

find . -name vmware-*.log -print0 | xargs -0 rm 
9

xargs kullanmayın. herhangi bir yardım olmadan bunu yapabilir bul:

find . -name "vmware-*.log" -exec rm '{}' \;

+3

Bu zaman iyidir Ekstra bir işlemden kaçınmak, özellikle de böyle bir şey için xargs çok uzun bir yol sağlayabilirsiniz. 'Bul 'bile' -exec ... 'yerine kullanabileceğiniz bir' silme' eylemine sahip olduğunu unutmayın - ancak bu şekilde özelleştirmek daha kolaydır. Ayrıca tcsh gibi eski bir kabuk kullanmıyorsanız kaşlı ayraçları belirtmeniz gerekmez. – Cascabel

+3

Ama bu yerine xargs' yapar 'gibi rm'' birkaç dosya geçme, tek tek her dosya için bir 'rm' sürecini başlatacak, nedenle yavaş olacak. – JaakkoK

+5

@jk: yeni 'find' uygulamaları' -exec rm bulmak nedeni budur '{}' + ', hangi tıpkı olacak toplu yukarı argümanlar' xargs' yapar bu. – ephemient

1

find . -name vmware-*.log | xargs -i rm -rf {}

0
find -iname pattern 

kullanımını -iname bulmak ben sep olarak yeni satır karakteri kullanıyorum -d seçeneği ile arator:

find . -name vmware-*.log | xargs -d '\n' rm 
0

Xargs uzay sorunu önlemek için model arama için

find . -name vmware-*.log -delete 
İlgili konular