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


152

Tengo 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 cierto identificador en sus nombres, por lo que puedo ls | grep IDENTIFIERobtener la lista exacta de archivos para mover.

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

Respuestas:


100

Si quieres moverte ABC-IDENTIFIER-XYZ.exto IDENTIFIER-XYZ.xmlpuedes 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 caracteres .

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


201

Podrías usar

mv -t DESTINATION file1 file2 file3

y

mv -t DESTINATION `ls|grep IDENTIFIER`

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


55
funciona en Linux, no estoy seguro de si funcionará en Mac
Alexander Mills

3
funciona en mac y git bash a través de git para windwows.
Brandt Solovij

11
No funciona en Mac (10.11.16 El Capitan). Pero simplemente puede poner la carpeta de destino en la parte posterior, es decirmv file1 file2 ... destination
Sheljohn

2
-1 para el segundo enfoque, ya que caerá para archivos que incluyen nuevas líneas
αғsнιη


24

Puedes usar comodines .

Ejemplo: para mover todos los archivos con extensión .doc

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

Esto moverá todos los archivos de documentos del directorio actual al destino específico.

Editar

Para responder el comentario.

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


2
pero la lista de archivos para mover no está determinada por extensión. algunos de los archivos tienen nombre: ABC-IDENTIFIER-XYZ.exty algunos simplemente IDENTIFIER-XYZ.exttienen diferentes extensiones, en su mayoría xmlo properties.
gilad hoch

@giladhoch ¿Qué tal el editado?
Achu

@gliadhoch Si te sientes tan cómodo usando grep, puedes ver mi respuesta arriba / abajo.
encender

no funcionará ya que hay otros .xmlarchivos (por ejemplo) que no quiero mover.
gilad hoch

20

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


10

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

mv file1 file2 file3 -t DESTINATION

Encuentro esto más fácil de recordar y más difícil de arruinar, ya que utiliza el mismo orden que la operación mv de vainilla:

mv file1 DESTINATION

La página del manual para mvno menciona una -topción.
Noumenon


7

Usa 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.


8
lsNo se recomienda para este tipo de uso. Si desea enumerar archivos, especialmente con un grepreverso, úselo find . -name \*IDENTIFIER\*.
NorTicUs

Esta respuesta fue solo para demostrar cómo puede usar la salida del comando anterior en mv. Como se mencionó ls | grep en la pregunta, simplemente lo copié.
encender

3
Según lo indicado por @NorTicUs, el uso de ls no es aconsejable. Además, los archivos con espacios pueden causar un problema.
Paddy Landau


5

Si tiene tantos archivos para mover, puede tener demasiados para el mvcomando (u otros comandos como rm). Sugiero usar xargspara mover cada archivo individualmente en un bucle como la moda. Una forma de evitar eso es hacer:

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

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


Esto también es útil cuando su IDENTIFICADOR no se convierte fácilmente en un comodín, o si desea utilizar grep con una expresión regular más compleja.
AggieBill

1
+1 para xargs. encontrar es casi siempre mejor y más seguro que ls. encontrar . IDENTIFICADOR -exec mv {} / ruta / a / dest / folder \; (código no probado). es para el directorio de trabajo actual. Los \; es finalizar el comando a ejecutar. Dependiendo de lo que esté haciendo, es posible que deba agregar -maxdepth 1 para evitar que vuelva a aparecer en subdirectorios.
Joe

5

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)


1
Esto realmente no agrega algo a las respuestas existentes, ¿no crees?
postre

1
simplemente elimina la necesidad de especificar la ruta completa al directorio para cada archivo
Sruli

3
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.

p.ej.

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

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


2

Puede usar la salida de ls para ingresar en mv commnad

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

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



1

Usando este comando puedes mover múltiples archivos.

mv SourceFilenames ~DestinationPath


1

La forma más fácil es así

mv {file1,file2,file3} DESTINATION

o directorio

mv {directory1,directory2,directory3} DESTINATION

o ambos archivos y directorios

mv {file1,file2,file3,directory1,directory2,directory3} DESTINATION

Espero que esto ayude

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.