Bir kalıpla eşleşen dosyaları silmek için find komutu nasıl kullanılır?


17

Belirli bir desenle eşleşen tüm dosyaları silecek bir bash komutu yazmaya çalışıyorum - bu durumda, tüm eski vmware günlük dosyalarını oluşturmuştur.

Bu komutu denedim:

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

Ancak, komutu çalıştırdığımda, adlarında boşluk olan tüm klasörleri boğar. Dosya yolunu biçimlendirmenin bir yolu var mı?


Yanıtlar:


20

Genellikle daha kolay ve daha az kafa karıştırıcı olma -execseçeneğini kullanıyorum find. Bunu dene:

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

Bundan sonraki her şey -exec, her bir sonuç için çalıştırılacak bir komut olarak alınır ;, oraya kaçan, böylece geçilecek find. Bu {}, findnormalde yazdırılacak dosya adıyla değiştirilir .

İstediğinizi yaptığını doğruladıktan sonra, simgesini kaldırabilirsiniz -i.


1
Ayrıca, yalnızca dizinleri değil silmek istediğiniz dosyalarsa, find komutuna '' -type f '' ekleyebilirsiniz.
JamesHannah

18

GNU'nuz findvarsa şu -deleteseçeneği kullanabilirsiniz :

find . -name "vmware-*.log" -delete

xargsDosya adlarındaki boşluklarla ilgili sorunu kullanmak ve önlemek için:

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

Ancak, günlük dosyalarınızın adlarında boşluk olmamalıdır. Kelime işlemci belgeleri ve MP3 dosyaları bunlara sahip olabilir, ancak günlük dosyalarınızın adlarını kontrol edebilmeniz gerekir.


Bu temiz. Bunu bilmiyordum.
Jeff Snider

8

findÇıktı listesini NULL'larla sınırlamayı xargsve girdi listesini aynı şekilde almayı söyleyebilirsiniz :

$ ls -l "file 1" "file 2"
-rw-r--r-- 1 james james 0 Oct 19 13:28 file 1
-rw-r--r-- 1 james james 0 Oct 19 13:28 file 2

$ find . -name 'file *' -print0 | xargs -0 ls -l
-rw-r--r-- 1 james james 0 Oct 19 13:28 ./file 1
-rw-r--r-- 1 james james 0 Oct 19 13:28 ./file 2

$ find . -name 'file *' -print0 | xargs -0 rm -v
removed `./file 2'
removed `./file 1'

Ayrıca, *ters eğik çizgi ile ya da vmware-*.logtek tırnak işaretleri içerisinden kaçtığınızdan emin olun , aksi takdirde kabuğunuz onu geçmeden önce genişletmeye çalışabilir find.


6

Bul -deleteseçeneği unutmayın . Özel karakterlerle hatasız dosyayı kaldırır ...

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.