GNU/Linux >> Tutoriales Linux >  >> Linux

Use grep para encontrar contenido en archivos y moverlos si coinciden

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

Linux
  1. ¿Encontrar patrón y mover?

  2. ¿Cómo encontrar múltiples cadenas en archivos?

  3. Utilice Buscar y localizar para buscar archivos en Linux

  4. Buscar y copiar archivos

  5. Encuentre múltiples archivos y cámbieles el nombre en Linux

Buscar comando en Linux (Buscar archivos y directorios)

Comando Grep en Linux (Buscar texto en archivos)

Cómo usar sed para buscar y reemplazar cadenas en archivos

Cómo encontrar archivos duplicados en Linux y eliminarlos

Encuentre archivos y directorios en Linux fácilmente

Encuentra texto en archivos en Linux usando grep