dando salida grep a rm


47

Estoy tratando de canalizar la grepsalida a rm, pero produce cosas inútiles. ¿Se requiere algún cambio rm? ¿O se le rmpuede proporcionar una expresión regular directamente?

ls | grep '^\[Daruchini'| rm

rm: operando faltante Pruebe `rm --help 'para obtener más información.


Copie y pegue siempre los mensajes de error. (He insertado el mensaje de error real para beneficio de futuros lectores. Pero solo pude hacer esto porque solo hay un posible mensaje de error en este caso. La mayoría de las veces, es vital tener el mensaje de error exacto para comprender el problema . Así que siempre copiar y pegar todos los mensajes de error en su totalidad).
Gilles 'SO siendo parada del mal'

Respuestas:


57

Debe usar xargspara convertir la entrada estándar en argumentos para rm.

$ ls | grep '^Dar' | xargs rm

(Tenga cuidado con los caracteres especiales en los nombres de archivo; con GNU grep, puede preferir

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

)

Además, aunque el shell no usa expresiones regulares, ese es un patrón simple:

$ rm Dar*

(Mientras tanto, creo que necesito dormir más).


2
Asumiendo que el autor de la pregunta no cometió un error cuando publicó la pregunta, está buscando rm Dar*, no rm !(Dar*).
Gilles 'SO- deja de ser malvado'

... cierto, sí, estaba atascado en el zsh ^modo (similar a la basg !cosa).
geekosaur

1
+1 Gran respuesta, tuve que agregar | tr "\n" "\0"antes del xargsbit. Visto en esta publicación: stackoverflow.com/questions/20307299/…
Adam Plocher


3

Si desea delimitar la salida de greppor líneas nuevas en lugar de espacios en blanco, puede especificarlo a xargstravés de la -dopción.

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

(como se describe en esta pregunta)


2

Para pasar la salida como argumento, tiendo a usar un ciclo while ya que no estoy familiarizado con xargs.

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

Este es el único que funcionó en mi caso.
marbel

0

El mejor comando para mí es:

find ./Daruchini* -exec rm {}\;
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.