Esto es lo que uso en Fedora Core 12:
grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR
Si desea buscar y mover archivos que no coincidan con su patrón (mueva archivos que no contengan 'Subject \[SPAM\]'
en este ejemplo) use:
grep -L -Z -r 'Subject: \[SPAM\]' . | xargs -0 -I{} mv {} DIR
La -Z significa salida con ceros (\0) después de los nombres de archivo (por lo que los espacios no se usan como delimitadores).
xargs -0
significa interpretar \0 como delimitadores.
La -L significa buscar archivos que no coincidan con el patrón. Reemplazar -L
con -l
si desea mover archivos que coincidan con su patrón.
Entonces
-I{} mv {} DIR
significa reemplazar {}
con los nombres de archivo, por lo que obtienes mv filenames DIR
.
Esto es lo que me ayudó:
grep -lir 'spam' ./ | xargs mv -t ../spam
Por supuesto, ya estaba en la carpeta requerida (es por eso que ./
) y los movió a la carpeta vecina. Pero puedes cambiarlos a cualquier ruta.
No sé por qué la respuesta aceptada no funcionó. Además, no tenía espacios ni caracteres especiales en los nombres de archivo; tal vez esto no funcione.
Robado aquí:comando Grep para encontrar archivos que contengan cadenas de texto y moverlos
Esta alternativa funciona donde xargs no está disponible:
grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done