grep output an rm übergeben


47

Ich versuche, die grepAusgabe an zu leiten rm, aber es gibt nutzloses Material aus. Ist ein Schalter erforderlich für rm? Oder kann rmdirekt ein regulärer Ausdruck bereitgestellt werden?

ls | grep '^\[Daruchini'| rm

rm: fehlender Operand Weitere Informationen finden Sie in `rm --help '.


Fehlermeldungen immer kopieren und einfügen. (Ich habe die eigentliche Fehlermeldung zum Nutzen zukünftiger Leser eingefügt. Dies konnte ich jedoch nur tun, da es in diesem Fall nur eine mögliche Fehlermeldung gibt. In den meisten Fällen ist es wichtig, die genaue Fehlermeldung zu haben, um das Problem zu verstehen Kopieren Sie also immer alle Fehlermeldungen vollständig und fügen Sie sie ein.)
Gilles 'SO- hör auf, böse zu sein'

Antworten:


57

Sie müssen verwenden xargs, um die Standardeingabe in Argumente für zu verwandeln rm.

$ ls | grep '^Dar' | xargs rm

(Achten Sie auf Sonderzeichen in Dateinamen. Bei GNU grep ist dies möglicherweise besser

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

)

Auch wenn die Shell keine regulären Ausdrücke verwendet, ist dies ein einfaches Muster:

$ rm Dar*

(In der Zwischenzeit denke ich, dass ich mehr Schlaf brauche.)


2
Angenommen, der Fragesteller hat keinen Fehler gemacht, als er die Frage gestellt hat, nach der er gesucht hat rm Dar*, nicht rm !(Dar*).
Gilles 'SO- hör auf böse zu sein'

... richtig, ja, ich war im zsh ^Modus fest (ähnlich wie das basg !Ding).
Geekosaurier

1
+1 Tolle Antwort, ich musste | tr "\n" "\0"vor dem xargsBit hinzufügen . Gesehen in diesem Beitrag: stackoverflow.com/questions/20307299/…
Adam Plocher


3

Wenn Sie die Ausgabe grepvon Zeilenumbrüchen anstelle von Leerzeichen eingrenzen möchten , können Sie dies xargsüber die -dOption festlegen .

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

(wie in dieser Frage beschrieben)


2

Um die Ausgabe als Argument weiterzugeben, verwende ich normalerweise eine while-Schleife, da ich mit xargs nicht vertraut bin.

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

Dies ist die einzige, die in meinem Fall funktioniert hat.
Marbel

0

Der beste Befehl für mich ist:

find ./Daruchini* -exec rm {}\;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.