Tengo una lista de nombres de archivos en list.txt, que tienen 'abc1.png, abc2.png, abc3.png...'.
Sin embargo, no sé los directorios donde están los archivos.
Quiero buscar todos los archivos en el archivo txt y moverlos a una nueva carpeta.
Respuesta1
Necesitasleer cada nombre de archivo línea por línea, luego inténtalo find
usando la name
opción y finalmente mv
llega al objetivo:
while IFS= read -r filename; do
find /somewhere -type f -name "$filename" -exec mv -- {} /somewhere/else/ \;
done < file.txt
Se {}
reemplazará con la ruta del archivo encontrada.
Respuesta2
Suponiendo que los nombres de sus archivos no contengan ", " o nuevas líneas y que cada archivo exista en list.txt solo una vez. Naturalmente, también debe cambiar el nuevo directorio al directorio que desee. Si falta algún archivo en list.txt, el archivo no se copia (y no se proporciona ninguna información).
sed -s "s/, /\\n/g" list.txt | xargs -IFILE -n1 find -name FILE -exec mv {} newdirectory \;
Respuesta3
Esto es fácil con algo de bash:
primero busque sus archivos con buscar y redirija la salida en otro archivo:
para arg en $(cat list.txt); busque / -name $arg -print >> files_with_path.txt; hecho
luego mv los archivos:
para arg en $(cat files_with_path.txt); hacer mv $arg /tu/destino/carpeta; hecho