
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 find
o 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 xargs
para 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).