Copiar archivos con cp y xargs
Hoy me toco copiar unos archivos de diferentes directorios hacia un directorio específico, después de horas de investigación y pruebas, les comento como lo realicé.
Si quieren copiar todos los archivos de un directorio y sus subdirectorios a otra ubicación lo pueden hacer con los siguientes comandos.
$ find . -iname "*foobar*" -exec cp "{}" ~/dirDestino \;
o este otro
$ find . -name "*.jpg" -print0 | xargs -t -0 -I xxx cp xxx ~/dirDestino
Pero si en su lugar ustedes tienen un archivo con las rutas (posiblemente resultado de otras verificaciones) como el siguiente
./dir1/47514.jpg
./dir2/11546.jpg
./dir2/11736.jpg
./dir3/80009.jpg
./dir3/80015.jpg
y esas rutas son las que quieren mandar como parámetros al cp en xargs lo pueden hacer agrando un caracter delimitador (en este caso un *) y luego enviarlo como parametro como se muestra a continuación.
$ awk '{printf $0"*"}' ejemplo.txt > ejemploConDelimitador.txt
$ cat ejemploConDelimitador.txt | xargs -t --delimiter=* -I xxx cp xxx ~/dirDestino
Listo! Esto resulta muy útil cuando se tratan de cientos de archivos. Espero que les sirva y si tienen alguna duda no se olviden de escribirla en los comentarios.










