Use grep para encontrar contenido en archivos y moverlos si coinciden


Estoy usando grep para generar una lista de archivos que necesito mover:

grep -L -r 'Subject: \[SPAM\]' .

¿Cómo puedo pasar esta lista al comando mv y mover los archivos a otro lugar?

Author: Chris Upchurch, 2008-09-18

9 answers

grep -L -Z -r 'Subject: \[SPAM\]' . | xargs -0 -I{} mv {} DIR

- Z significa salida con ceros (\0) después de los nombres de archivo (por lo que los espacios no se utilizan como delimitadores).

xargs -0

Significa interpretar \0 como delimitadores.

Entonces

-I{} mv {} DIR

Significa reemplazar {} con los nombres de archivo, de modo que se obtiene mv filenames DIR.

 68
Author: daveb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-04 09:37:56

Esta alternativa funciona donde xargs no está disponible:

grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done
 17
Author: Tobias Kunze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-18 12:20:23

Esto es lo que uso en Fedora Core 12:

grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR
 4
Author: Brad Vokey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-05-31 19:56:37

Esto es lo que me ayudó:

grep -lir 'spam' ./ | xargs mv -t ../spam

Por supuesto, ya estaba en la carpeta requerida (por eso ./) y los moví a la carpeta vecina. Pero puedes cambiarlos a cualquier camino.

No se por qué la respuesta aceptada no funcionó. También no tenía espacios y caracteres especiales en los nombres de archivo-tal vez esto no va a funcionar.

Robado aquí: Grep comando para encontrar archivos que contienen cadena de texto y moverlos

 3
Author: vladkras,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-13 12:36:30

Hay varias maneras, pero aquí hay una lenta pero a prueba de fallos:

IFS=$'\n'; # set the field separator to line break
for $mail in $(grep -L -r 'Subject: \[SPAM\]' .); do mv "$mail" your_dir; done;
IFS=' '; # restore FS
 1
Author: e-satis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-18 12:12:40

Tal vez esto funcione:

mv $(grep -l 'Subject: \[SPAM\]' | awk -F ':' '{print $1}') your_file
 1
Author: Ritz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-26 05:51:35
mv `grep -L -r 'Subject: \[SPAM\]' .` <directory_path>

Asumiendo que el grep que escribiste devuelve las rutas de archivos que esperas.

 1
Author: Loukan ElKadi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-10 10:29:44

Trabajo perfecto para mí:

  • Mueva los archivos que contienen el texto con la palabra MYSTRINGTOSEARCH al directorio MYDIR.

    Buscar . - type f-exec grep-il 'MYSTRINGTOSEARCH' {} \; - exec mv {} MYDIR/\;

Espero que esto ayude

 0
Author: Mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-05 15:00:27

Puede pasar el resultado al siguiente comando usando grep ... / xargs mv {} destino

Compruebe man xargs para más información.

 -1
Author: Confusion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-18 12:04:57