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?
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
.
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
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
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
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
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
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.
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
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.
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