Tenga una lista de archivos, muévalos usando un comando

Tenga una lista de archivos, muévalos usando un comando

Ejecuté un comando que encuentra muchos archivos según algunos criterios de búsqueda. Devuelve los archivos así:

./somepath/somepath/file.something
./asdf/asdf/s.php
./etc/a.php
./a/b/c/d/e/f/g.jpg

Entonces me preguntaba, si capturo esta salida en un archivo (es decir, un archivo por línea), ¿alguien puede ayudarme a escribir un comando que recorra el archivo y mueva los archivos uno por uno a un directorio específico?

Gracias de antemano.

Respuesta1

while read -r filename
  do
  mv -- "$filename" directory
done < list_of_files.txt

No probado (estoy en una PC del trabajo con Windows) pero debería funcionar.

Respuesta2

your_command | xargs -I% mv "%" dest_dir

Si su comando es findo tiene alguna forma de terminar los nombres de archivos con un valor nulo:

your_command | xargs -0 -I% mv "%" dest_dir

o

find [find-args] -print0 | xargs -0 -I% mv "%" dest_dir

El uso de valores nulos para terminar nombres de archivos permite que esto funcione con nombres de archivos que pueden contener espacios, nuevas líneas, etc.

También puedes usar xargspara procesar tu archivo si ya lo has creado:

xargs -a filename -I% mv "%" dest_dir

Respuesta3

Otra opción, si los nombres de los archivos no contienen espacios en blanco, sería

mv `search_command_here` dest_directory

(La sintaxis de comillas invertidas también es bash, pero la pregunta establece específicamente que esto está en Linux y que todas las distribuciones principales de Linux usan bash de forma predeterminada).

información relacionada