¿Cómo muevo todos los archivos de salida de un comando?


22

Tengo este comando grep para buscar archivos sin la palabra Adjuntos en ellos.

grep -L -- Attachments *

Quiero mover todos los archivos que salen de ese comando. ¿Cómo hago eso en bash? ¿Utilizo una pipa? ¿Utilizo una declaración if / then más prolija en un script completo?

Respuestas:


18

Si sabe que ninguno si los nombres de archivo contienen nuevas líneas, tabulaciones, espacios o combinaciones globales que pueden producir una coincidencia, esto puede ser más fácil para un caso único:

mv $(grep -L Attachments *) dest_dir

36

Lo que quieres hacer es usar una opción de tubería y greps -Z:

Usando GNU grep y mv

grep -LZ -- Attachments * | xargs -0 mv -t target_directory

El -Zcombinado con xargs -0maneja cualquier nombre de archivo con caracteres especiales.

Usando BSD grep y mv (como en MacOS X)

grep -L --null -- Attachments * |
while IFS= read -r -d "" file; do 
    mv "./$file" target_directory
done

En BSD, grep -Zsignifica descomprimir , grep --nullfunciona tanto en BSD como en GNU. BSD mvcarece de opción-t

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.