mover archivo por lista en archivo (con espacios en blanco iniciales)


12

Tengo un archivo que contiene nombres de archivo. Por ejemplo:

/tmp/list.txt (es con los espacios al comienzo de cada línea):

  /tmp/file.log
  /app/nir/home.txt
  /etc/config.cust

Quiero, usando una línea, mover todos los archivos listados /tmp/list.txta/app/dest

Entonces debería ser algo como esto:

cat /tmp/list.txt | xargs mv /app/dest/

Respuestas:


21

Solo le falta la -topción para mv(suponiendo GNU mv):

cat /tmp/list.txt | xargs mv -t /app/dest/

o más corto (inspirado por la respuesta de X Tian):

xargs mv -t /app/dest/ < /tmp/list.txt

los espacios iniciales (y posibles finales) se eliminan. Los espacios dentro de los nombres de archivo darán lugar a problemas.

Si tiene espacios o pestañas o comillas o barras invertidas en los nombres de archivo, suponiendo que GNU xargspuede usar:

sed 's/^ *//' < /tmp/list.txt | xargs -d '\n' mv -t /app/dest/

Gracias por la respuesta . con esto puedo hacer una lista de muchos archivos con [!] en su nombre, y moverme a otra carpeta, con lo siguiente: ls | grep -e ". [!]]" | tee 001.txt; sed 's / ^ * //' <001.txt | xargs -d '\ n' mv -t / destinypath /
inukaze

6

Asumiendo que sus nombres de archivo son relativamente sanos (no hay líneas nuevas o caracteres extraños):

while read file; do mv "$file" /app/dest/; done < list.txt 

Para tratar con nombres de archivo extraños (se rompe si un nombre de archivo tiene una nueva línea):

while IFS= read -r file; do mv "$file" /app/dest/; done < list.txt 

Hola terdon, ¿cómo mover carpetas al nuevo directorio en función de su coincidencia en el archivo csv? ¿Podrían ayudarme con esto [ unix.stackexchange.com/questions/433068/… ¡ Gracias!
user3351523

@ user3351523 su pregunta ha sido cerrada. Pedir ayuda a personas aleatorias no cambiará eso. En cambio, edite la pregunta y explique cómo las soluciones en el duplicado no lo ayudaron. Si algo "no funcionó", explique cómo falló. Las soluciones deberían funcionar para usted, por lo que debe explicar qué sucede cuando las prueba.
terdon

Yo lo hice. Puedes echar un vistazo.
user3351523

@ user3351523 no ha explicado por qué las soluciones del engaño fallan para usted. Y no ha explicado cómo fallan las respuestas que ha obtenido. Es posible que solo necesite usar, cp -Hrpero no sé si OSX lo cpadmite.
terdon

3
for i in $(cat /tmp/list.txt); do mv "$i" /app/dest/; done

1

Lectura pura de xargs directamente del archivo

xargs -l -i < flist  mv -v {} /app/dst

editar 1 - después del comentario de @Anthon a continuación,

xargs -I{} < flist  mv -v {} /app/dst

1
-ise deprecrated, y, o reemplazo -I implica -l/ --max-lines=1. Y hace mvque se ejecute para cada archivo por separado.
Anthon

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.