memberikan output grep ke rm

47

Saya mencoba menyalurkan grepoutput rm, tetapi menghasilkan hal-hal yang tidak berguna. Apakah diperlukan saklar rm? Atau dapatkah rmdisediakan regexp secara langsung?

ls | grep '^\[Daruchini'| rm

rm: operan yang hilang Coba `rm --help 'untuk informasi lebih lanjut.

CodeBladeRunner
sumber
Selalu salin dan tempel pesan kesalahan. (Saya telah memasukkan pesan kesalahan yang sebenarnya untuk kepentingan pembaca di masa depan. Tetapi saya hanya bisa melakukan ini karena hanya ada satu pesan kesalahan yang mungkin dalam kasus ini. Sebagian besar waktu, sangat penting untuk memiliki pesan kesalahan yang tepat untuk memahami masalahnya. Jadi selalu salin dan tempel semua pesan kesalahan secara penuh.)
Gilles 'SO- stop being evil'

Jawaban:

57

Anda perlu menggunakan xargsuntuk mengubah input standar menjadi argumen rm.

$ ls | grep '^Dar' | xargs rm

(Hati-hati dengan karakter khusus dalam nama file; dengan GNU grep, Anda mungkin lebih suka

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

)

Selain itu, sementara shell tidak menggunakan regexps, itu adalah pola sederhana:

$ rm Dar*

(Sementara itu, saya pikir saya perlu lebih banyak tidur.)

geekosaurus
sumber
2
Dengan asumsi penanya tidak melakukan kesalahan ketika dia memposting pertanyaan, dia mengejar rm Dar*, tidak rm !(Dar*).
Gilles 'SANGAT berhenti menjadi jahat'
... benar, ya, saya terjebak dalam zsh ^mode (mirip dengan basg !hal itu).
geekosaur
1
+1 Jawaban yang bagus, saya harus menambahkan | tr "\n" "\0"sebelum xargsbit. Terlihat dalam posting ini: stackoverflow.com/questions/20307299/…
Adam Plocher
5

Jangan parsing output darils .

Di sini, sangat mudah untuk mendapatkan shell untuk memfilter file yang Anda inginkan. Perhatikan bahwa shelllah yang memperluas polanya Dar*, bukan rmperintahnya. Ekspansi pola yang dilakukan oleh shell disebut globbing .

rm Dar*

Dalam kasus yang lebih kompleks, cari findperintah.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
3

Jika Anda ingin membatasi output grepoleh baris baru dan bukan spasi putih, Anda bisa menentukannya xargsmelalui -dopsi.

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

(seperti yang dijelaskan dalam pertanyaan ini )

mherzl
sumber
2

Untuk melewatkan output sebagai argumen, saya cenderung menggunakan loop sementara karena saya tidak terbiasa dengan xargs.

ls | grep '^Dar' | while read line; do rm "$line";done;
Mitos
sumber
ini adalah satu-satunya yang berhasil dalam kasus saya.
marbel
0

Perintah terbaik bagi saya adalah:

find ./Daruchini* -exec rm {}\;
Bodale
sumber