37 votos

Linux (mv o cp) archivos específicos de una lista de texto de archivos?

Tengo un directorio de muchos archivos, algo así como 50.000 en formato pdf y otros archivos en un servidor. Necesito mover específicos a otro directorio. Puedo generar una lista de los archivos que necesitan ser trasladados, ya sea en formato csv o cualquier otro formato de texto.

Lo que necesitas hacer es ejecutar un script en bash y mover o copiar los archivos que se enumeran en el archivo de texto a otro directorio.

¿Hay una manera fácil de hacer esto? Cualquier sugerencia o recursos sería muy apreciada.

34voto

jason saldo Puntos 5036

Con el fin de evitar un inútil el uso de cat (y si no uso rsync):

xargs -a file_list.txt mv -t /path/to/dest

Este encargamos de cualquier nombre de archivo válido, a menos que contenga un salto de línea, si aparecen los archivos, uno por cada línea.

28voto

Ignacio Vazquez-Abrams Puntos 30600

rsync tiene varias opciones que puede tomar una lista de los archivos de proceso(--files-from, --include-from, etc.).

15voto

MadHatter Puntos 44059
for file in `cat listoffiles`; do mv "$file" /path/of/destination ; done

suponiendo bash, además de listoffiles que contiene un archivo por línea. Mi única objeción a la rsync ruta es que el OP pregunta por el método de mover los archivos, no para copiarlos. rsync tiene más banderas que una boda real, así que estoy seguro de que puede ser modificado para hacerlo, pero a veces sencillo es mejor!

1voto

John Puntos 11

Accidentalmente, he copiado el contenido completo de una carpeta en un directorio de destino en lugar de mover el directorio completo. Esto resultó en un completo directorio de destino en lugar de la de origen directorio añadido al directorio.

Para solucionar este problema, hice lo siguiente:

ls -rt /path/to/cluttered/destination/directory/ > /opt/dircheck/filestomove El comando anterior crea la filestomove archivo que va a ser una lista de todo el contenido del directorio de destino, a la inversa ordenados por el tiempo, el significado más antiguo a lo más reciente.

A continuación, he creado un sub-directorio de la ahora desordenado directorio de destino para mover el material.

mkdir /path/to/cluttered/destination/directory/newsubdirectory

Luego repetí el listado de directorio, a excepción de la lista de la pantalla y muestra más detalles.

ls -lrht /path/to/cluttered/destination/directory/ Esta línea muestra el directorio, ordenados por fecha en orden ascendente (inversa) y muestra más información, incluyendo la fecha y hora de cada archivo en el ahora desordenado directorio de destino. Me refiero a esto, a partir de la parte superior para mostrar lo que los directorios y archivos que quiero seguir donde estaban. Habrá un espacio en el sello de fecha/hora de los archivos donde todos los nuevos archivos de inicio que no debería estar allí.

Luego he editado el filestomove archivo creado en el primer paso por encima (que es, ordenados por fecha) y se eliminan los pocos de la lista que hubo anteriormente que quiero estar desde el directorio original.

vim /opt/dircheck/filestomove Eliminar en la parte superior, todos los archivos que no desee mover.

Luego he utilizado el comando que aparece anteriormente en este post para mover los archivos en mi lista para el nuevo directorio.

sudo xargs -a /opt/dircheck/filestomove mv -t /path/to/cluttered/destination/directory/newsubdirectory

Esta movido todos los archivos en una fracción de segundo. (Nota: puede que no necesite el sudo en el principio, esto es una cuestión de permisos de archivo).

Ahora mi original directorio de destino es bonito y limpio, y contiene un nuevo directorio con todos los archivos y directorios que se saturan.

0voto

AliGibbs Puntos 1911

Intente algo como:

cat list.txt | while read line; do mv "$line" /images; done

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: