donnant la sortie de grep à rm


47

J'essaie de canaliser la grepsortie vers rm, mais elle produit des trucs inutiles. Est-ce qu'un interrupteur est nécessaire rm? Ou peut rmpeut être fourni une expression rationnelle directement?

ls | grep '^\[Daruchini'| rm

rm: opérande manquant Essayez «rm --help» pour plus d’informations.


Toujours copier-coller les messages d'erreur. (J'ai inséré le message d'erreur réel pour le bénéfice des futurs lecteurs. Mais je ne pouvais le faire que parce qu'il n'y a qu'un seul message d'erreur possible dans ce cas. La plupart du temps, il est essentiel d'avoir le message d'erreur exact pour comprendre le problème. Il faut donc toujours copier-coller tous les messages d'erreur au complet.)
Gilles, arrête de faire le mal '18

Réponses:


57

Vous devez utiliser xargspour transformer une entrée standard en arguments pour rm.

$ ls | grep '^Dar' | xargs rm

(Attention aux caractères spéciaux dans les noms de fichiers; avec GNU grep, vous pourriez préférer

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

)

De plus, bien que le shell n'utilise pas les expressions rationnelles, c'est un modèle simple:

$ rm Dar*

(Pendant ce temps, je pense avoir besoin de plus de sommeil.)


2
En supposant que le demandeur ne se soit pas trompé lorsqu’il a posté la question, il est après rm Dar*, pas rm !(Dar*).
Gilles 'SO- arrête d'être méchant'

... oui, oui, j'étais coincé en zsh ^mode (semblable à la basg !chose).
geekosaur

1
+1 Excellente réponse, je devais ajouter | tr "\n" "\0"avant le xargsbit. Vu dans ce post: stackoverflow.com/questions/20307299/…
Adam Plocher


3

Si vous souhaitez délimiter la sortie greppar des nouvelles lignes plutôt que par des espaces, vous pouvez le spécifier xargsvia cette -doption.

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

(comme décrit dans cette question)


2

Pour passer la sortie sous forme d'argument, j'ai tendance à utiliser une boucle while puisque je ne suis pas familier avec xargs.

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

c'est le seul qui a fonctionné dans mon cas.
Marbel

0

La meilleure commande pour moi est:

find ./Daruchini* -exec rm {}\;
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.