przekazując wyjście grep do rm


47

Próbuję grepprzesyłać dane wyjściowe do potoku rm, ale generuje to bezużyteczne rzeczy. Czy wymagany jest jakikolwiek przełącznik rm? Czy może rmbyć bezpośrednio wyrażeniem regularnym?

ls | grep '^\[Daruchini'| rm

rm: brakujący operand Aby uzyskać więcej informacji, wypróbuj `rm --help '.


Zawsze kopiuj i wklej komunikaty o błędach. (Wstawiłem rzeczywisty komunikat o błędzie z korzyścią dla przyszłych czytelników. Ale mogłem to zrobić, ponieważ w tym przypadku jest tylko jeden możliwy komunikat o błędzie. W większości przypadków konieczne jest podanie dokładnego komunikatu o błędzie, aby zrozumieć problem Tak więc zawsze kopiuj i wklej wszystkie komunikaty o błędach w całości.)
Gilles „SO- przestań być zły”

Odpowiedzi:


57

Musisz użyć, xargsaby zamienić standardowe dane wejściowe na argumenty rm.

$ ls | grep '^Dar' | xargs rm

(Uważaj na znaki specjalne w nazwach plików; w GNU grep możesz preferować

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

)

Ponadto, chociaż powłoka nie używa wyrażeń regularnych, jest to prosty wzorzec:

$ rm Dar*

(tymczasem myślę, że potrzebuję więcej snu.)


2
Zakładając, że pytający nie popełnił błędu, gdy opublikował (a) pytanie, on (a) go szuka rm Dar*, nie rm !(Dar*).
Gilles „SO- przestań być zły”

... tak, tak, utknąłem w zsh ^trybie (podobnie do basg !rzeczy).
geekozaur

1
+1 Świetna odpowiedź, musiałem dodać | tr "\n" "\0"przed xargsbit. Widziane w tym poście: stackoverflow.com/questions/20307299/…
Adam Plocher


3

Jeśli chcesz ograniczyć dane wyjściowe grepznakami nowej linii zamiast białych znaków, możesz to określić xargsza pomocą -dopcji.

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

(jak opisano w tym pytaniu)


2

Do przekazywania danych wyjściowych jako argumentu zwykle używam pętli while, ponieważ nie znam xargs.

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

to jedyny, który działał w moim przypadku.
marbel

0

Najlepszym dla mnie poleceniem jest:

find ./Daruchini* -exec rm {}\;
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.