it-swarm-id.com

memberikan output grep ke rm

Saya mencoba untuk mengirimkan grep output ke rm, tetapi menghasilkan hal-hal yang tidak berguna. Apakah diperlukan sakelar untuk rm? Atau bisakah rm dapat langsung diberikan regexp?

ls | grep '^\[Daruchini'| rm

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

50
CodeBladeRunner

Anda perlu menggunakan xargs untuk mengubah input standar menjadi argumen untuk rm.

$ ls | grep '^Dar' | xargs rm

(Waspadalah terhadap 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.)

61
geekosaur

Jangan parsing output dari ls .

Di sini, sangat mudah untuk mendapatkan Shell untuk memfilter file yang Anda inginkan. Perhatikan bahwa Shelllah yang memperluas pola Dar*, bukan perintah rm. Ekspansi pola yang dilakukan oleh Shell disebut globbing .

rm Dar*

Dalam kasus yang lebih kompleks, lihat perintah find.

Jika Anda ingin membatasi output grep oleh baris baru dan bukan spasi putih, Anda dapat menentukan itu untuk xargs melalui -d pilihan.

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

(seperti yang dijelaskan dalam ini pertanyaan)

3
mherzl

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;
2
Mitms

Pada Catalina 10.15.3, dengan zsh, cara saya menemukan berurusan dengan baris baru dan ruang putih adalah:

 Sudo find / | grep -i 'yourString' | tr '\n' '\0' | xargs -0 -n1 rm -r 

Dengan kata lain, dengan menerjemahkan baris baru tanpa spasi (tr\n ke\0) sebelum menghapusnya dengan "rm -0".

Juga, saya selalu menggunakan 'find' + 'grep -i' karena 'find -iname' terkadang tidak menghasilkan apa-apa.

Satu catatan terakhir: ia menemukan dan menghapus file dan folder yang cocok dengan 'yourString'. Hanya untuk file, tentukan "find -type f", dan kemudian opsi "-r" untuk rm tidak berguna.

0
YvUh

Perintah terbaik bagi saya adalah:

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