rm'ye grep çıktısı verilmesi


47

grepÇıkışı borulamaya çalışıyorum rmama işe yaramaz şeyler çıkarıyor. Herhangi bir anahtar için gerekli rmmi? Veya rmdoğrudan bir regexp sağlanabilir mi?

ls | grep '^\[Daruchini'| rm

rm: işlenen eksik. Daha fazla bilgi için 'rm --help' komutunu deneyin.


Hata mesajlarını her zaman kopyala ve yapıştır. (Gelecekteki okuyucuların yararına gerçek hata mesajını ekledim. Fakat bunu yapabildim çünkü bu durumda yalnızca bir hata mesajı mevcuttu. Çoğu zaman, sorunu anlamak için kesin hata mesajının olması hayati önem taşır. Bu yüzden, her zaman tüm hata mesajlarını kopyala-yapıştır kopyala.)
Gilles 'kötülük'

Yanıtlar:


57

xargsStandart girişi argümanlara dönüştürmek için kullanmanız gerekir rm.

$ ls | grep '^Dar' | xargs rm

(Dosya adlarındaki özel karakterlere dikkat edin; GNU grep ile tercih edebilirsiniz.

$ ls | grep -Z '^Dar' | xargs -0 rm

)

Ayrıca, kabuk regexps kullanmasa da, bu basit bir kalıptır:

$ rm Dar*

(bu arada, daha fazla uykuya ihtiyacım olduğunu düşünüyorum.)


2
Askerin soruyu / soruları yayınladığı sırada hata yaptığını farz edersek, peşinde rm Dar*değil rm !(Dar*).
Gilles 'SO- kötülük'

... doğru, evet, zsh ^modda sıkışıp kaldım ( basg !şeye benzer ).
geekosaur

1
+1 Harika cevap, biraz | tr "\n" "\0"önce eklemek zorunda kaldım xargs. Bu yazıda görüldü: stackoverflow.com/questions/20307299/…
Adam Plocher


3

grepÇıktısını boşluklardan ziyade yeni satırlarla sınırlandırmak istiyorsanız , bunu seçenek xargsüzerinden belirtebilirsiniz -d.

$ ls | grep '^Dar' | xargs -d '\n' rm

( bu soruda açıklandığı gibi )


2

Çıktıyı argüman olarak iletmek için, xargs ile aşina olmadığım için bir süre döngüsü kullanıyorum.

ls | grep '^Dar' | while read line; do rm "$line";done;

bu benim davamda çalışan tek kişi.
marbel

0

Benim için en iyi emir:

find ./Daruchini* -exec rm {}\;
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.