¿Cómo mover múltiples archivos a la vez a un directorio de destino específico?

118

Obtuve un montón de archivos en algún directorio (junto con muchos otros archivos) que quiero mover.

Afortunadamente, todos los archivos que quiero mover contienen un determinado identificador en sus nombres, por lo que puedo ls | grep IDENTIFIER para obtener la lista exacta de archivos para mover.

Pero, ¿cómo puedo ejecutar mv file /path/to/dest/folder/ a la vez, y no uno por uno (hay muchos archivos para mover)?

    
pregunta gilad hoch 08.11.2012 - 14:13

11 respuestas

85

Si desea mover ABC-IDENTIFIER-XYZ.ext o IDENTIFIER-XYZ.xml , puede usar:

mv *IDENTIFIER* ~/YourPath/

* es un comodín para cero o más caracteres , esto significa cero o más caracteres , seguido de IDENTIFIER , seguido de cero o más personajes .

Esto moverá todos los archivos que contienen el IDENTIFIER que especificó.

    
respondido por el Evandro Silva 08.11.2012 - 14:33
166

Podrías usar

mv -t DESTINATION file1 file2 file3

y

mv -t DESTINATION 'ls|grep IDENTIFIER'

funciona, pero no estoy seguro si mv se invoca varias veces o no, ya que grep generará una nueva línea para cada coincidencia.

    
respondido por el tuomaz 14.11.2012 - 12:07
20

Puede usar comodines .

Ejemplo: mover todos los archivos que tengan extensión .doc

mv *.doc /path/to/dest/folder/

Esto moverá todos los archivos de doc bajo el directorio actual al destino específico.

Editar

Para responder el comentario.

mv *.ext *.xml *.txt /path/to/dest/folder/

    
respondido por el Achu 08.11.2012 - 14:21
15

En caso de que desee mover un conjunto de archivos irrelevantes (no hay un patrón común en los nombres y tipos) puede hacer lo que dijo el Sr. Rajanand: primero vaya al directorio que contiene los archivos que desea mover

mv file1.ext1 file2.ext2 file3.ext3.. /destination/

En caso de que los archivos estén dispersos en diferentes directorios, solo necesita especificar la ruta para cada archivo en el comando mover

    
respondido por el Ismail AL-taharwa 26.03.2014 - 05:03
10

Utilizo la técnica de tuomaz, pero ligeramente modificada:

mv file1 file2 file3 -t DESTINATION

Me resulta más fácil de recordar y más difícil de estropear, ya que utiliza el mismo orden que la operación vanilla mv:

mv file1 DESTINATION
    
respondido por el Blake Frederick 20.01.2015 - 17:11
7

Utilice este comando:

mv 'ls|grep IDENTIFIER' /path/to/dest/folder  

Sin embargo, ls no se recomienda para este tipo de uso. Use el comando find en su lugar.

    
respondido por el ignite 08.11.2012 - 14:44
5

Si tiene tantos archivos para mover, en realidad puede tener demasiados para el comando mv (u otros comandos como rm ). Sugiero usar xargs para mover cada archivo individualmente en forma de bucle. Una forma de evitarlo es hacer:

ls -1 | grep IDENTIFIER | xargs -i mv {} /path/to/dest/folder/

El ls -1 (menos uno) asegura que solo hay un nombre de archivo en cada línea. Si tiene alias ocultos para el comando ls , puede tener múltiples nombres de archivo en una sola línea e inadvertidamente mover un archivo que no tenía la intención de mover.

    
respondido por el AggieBill 14.11.2012 - 11:05
2

Puede usar la salida de ls para ingresar en mv commnad

mv $(ls | grep IDENTIFIER) /path/to/dest/dir

El comando entre $() devuelve una lista de los nombres de archivo que coinciden con su búsqueda, y que puede proporcionarse como un parámetro para el comando mv.

    
respondido por el Fuad Saud 13.11.2012 - 20:38
2
find -type f -name "[range]" -exec mv {} target-directory ';'

este comando moverá los nombres de archivo con cualquier patrón / rango al directorio de destino.

ej.

find -type f -name "file[1-50000]" -exec mv {} target-directory ';'

moverá archivos con nombres como file1 , file2 ... file50000 a target-directory .

    
respondido por el user734124 07.09.2017 - 16:51
1

Usando este comando puedes mover múltiples archivos.

mv SourceFilenames ~DestinationPath

    
respondido por el Rajanand 14.11.2012 - 11:13
1

Si los archivos están en el mismo directorio, puede usar

mv /path/to/source/dir/{file1,file2,*.ext1,*.ext2} /path/to/destination/

(probado en Ubuntu 16.04)

    
respondido por el Sruli 01.12.2017 - 10:19

Lea otras preguntas en las etiquetas