¿Cómo muevo todos los archivos de una carpeta a otra usando la línea de comando?

245

Me gustaría saber cómo puedo mover todos los archivos de una carpeta a otra carpeta con una línea de comando.

Digamos que estoy en mi carpeta de Descargas y hay 100 archivos que me gustaría mover a mi carpeta de Videos, sin tener que escribir el nombre de todos los archivos.

Miguel
fuente
Estás preguntando acerca de mudarte, filespero las personas te muestran cómo hacerlo no solo filessino folderstambién. ¿Eso esta bien?
Askar
2
@ Hontvári Levente dio una respuesta hace un año que parece ser, de lejos, la mejor, limpia, simple y funciona. Entonces, ¿cómo obtuvo solo 3 votos (en comparación con 262 para la respuesta actualmente en la parte superior)?
Ray Butterworth

Respuestas:

331

Abra una terminal y ejecute este comando:

mv  -v ~/Downloads/* ~/Videos/

Moverá todos los archivos y carpetas de la carpeta Descargas a la carpeta Videos.


Para mover todos los archivos, pero no las carpetas:

Si está interesado en mover todos los archivos (pero no las carpetas) de la carpeta Descargas a la carpeta Videos, use este comando

find ~/Downloads/ -type f -print0 | xargs -0 mv -t ~/Videos

Para mover solo archivos de las carpetas de Descarga, pero no de las subcarpetas:

Si desea mover todos los archivos de la carpeta Descargas, pero no los archivos dentro de las carpetas de la carpeta Descargas, use este comando:

find ~/Downloads/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ~/Videos

aquí, la -maxdepthopción especifica qué tan profundo debe intentar la búsqueda profunda, es 1decir, solo el directorio especificado en el comando de búsqueda. Puedes intentar usar 2, 3también para probar.

Consulte la página de manual de búsqueda de Ubuntu para obtener una explicación detallada

Anwar
fuente
3
puede usar mv solo para mover un directorio completo a otra carpeta: mv folder ~ / Documents
JohnMerlino
20
FYI Creo que su primer comando ("mv -v ~ / Downloads / * ~ / Videos /") no moverá los archivos de puntos.
Mark Doliner el
1
Sí, no moverá los archivos
Anwar
3
Nótese bien. se -print0 | xargs -0 mv -t ~/Videospuede hacer de manera más eficiente con -exec mv -t ~/Videos \{\} \+:-)
artfulrobot
3
mv -v ~/Downloads/* ~/Videos/no funciona para archivos ocultos
FreeLightman
28
mv ~/Downloads/* ~/Videos

Moverá todos los archivos, incluidas las subcarpetas, en el directorio que desee mv. Si desea cp(copiar) o rm(eliminar) necesitará la -ropción (recursiva) para incluir subcarpetas.

usuario223289
fuente
2
Mi comando mv no tiene una opción -R (Ubuntu 14.04).
Mark Doliner el
1
@MarkDoliner, sí, mvno necesita una opción recursiva para incluir subcarpetas. Se puede usar también para renombrar.
Alen el
No necesitaba *. Lo mismo sucedió sin usar la estrella.
MycrofD
El ~ / en el prefijo de los nombres de carpeta no siempre funciona (no funciona en bash y git al menos)
Krish Munot
Esta solución dará un error si el directorio de origen está vacío.
Pierre Thibault
11

Para el caso simple:

mv ~/Downloads/* ~/Videos

Si también quiere mover archivos dot (ocultos), configure la opción de shell dotglob .

shopt -s dotglob
mv ~/Downloads/* ~/Videos

Esto deja establecida la opción de shell.

Para usar dotglob una vez, ejecute los comandos en una subshell:

(shopt -s dotglob; mv ~/Downloads/* ~/Videos)
Hontvári Levente
fuente
Una nota para mí: la última opción (shopt -s dotglob; mv ~/Downloads/* ~/Videos) solo mueve (corta) el contenido (incluidos los archivos ocultos). En este caso, las carpetas de origen y de destino ya deben existir. Al final, el directorio de origen queda vacío.
Pathros
Esta debería ser la respuesta aceptada
megar
11

Es posible usando rsync, por ejemplo:

rsync -vau --remove-source-files src/ dst/

dónde:

-v, --verbose: Aumenta la verbosidad.

-a, --archive: Modo de archivo; iguales -rlptgoD(sin -H, -A, -X).

-u, --update: Salta archivos que son más nuevos en el receptor.

--remove-source-files Esto le indica rsyncque elimine del lado emisor los archivos (es decir, no directorios) que forman parte de la transferencia y que se han duplicado con éxito en el lado receptor.

Si tiene privilegios de root, prefije con sudopara anular posibles problemas de permisos.

kenorb
fuente
1
¡ADVERTENCIA! la opción --delete-after como se indicó no funciona de la manera esperada. No elimina los archivos de origen después de una copia exitosa ... ELIMINA TODOS LOS ARCHIVOS RESTANTES / OTROS EN EL DESTINO. (como señaló @kenorb ... ¡pero no leí con suficiente atención! DOH)
Jay Marm
4

Utilizar

mv -v ~/rootfolder/branch/* ~/rootfolder

Espero que esto ayude. Porque tuve el mismo dolor y perdí mucho tiempo arreglando mi error.

Udit Chugh
fuente
2

Para mover un directorio con o sin contenido a su nuevo nombre, tal como usaría el mvcomando para cambiar el nombre de un archivo:

mv -T dir1 dir2

dónde:

  • -T trata el destino como un archivo normal
  • dir1 es el nombre original del directorio
  • dir2 es el nuevo nombre del directorio

NB: dir2no tiene que existir.

Espero que esto ahorre mucho tiempo a alguien, como novato, antes de esto, crearía un directorio con el nuevo nombre y luego movería el contenido del directorio al directorio creado anteriormente.

Uso para subdirectorios

Este comando es útil cuando se han guardado muchos archivos en una subcarpeta del directorio de destino, es decir Downloads/mp4. En este ejemplo, la ejecución mv -T Downloads/mp4 Videosdará como resultado la eliminación de lamp4 subcarpeta y todos los archivos contenidos dentro se moverán a la carpeta Videos.

Feyisayo Sonubi
fuente
1
+1 porque probado trabajando en Xubuntu 14.04. He agregado un ejemplo en esta respuesta para mostrar que este comando hará dir1que se elimine. Además de esta precaución, esta respuesta ha notado algo bueno para el uso diario.
clearkimura
1
"Para mover un directorio con o sin contenido a su nuevo nombre" ¿Cómo puede mover un directorio ... a un nombre? Eso no tiene sentido. "-T trata el destino como un archivo normal" ¿Cómo puede un destino ser un archivo? ¿Te refieres al directorio?
Monica Heddneck
Es como cambiar el nombre de un archivo a su nuevo nombre como lo haría con algo como, mv fileA fileBpero la -Tbandera en este caso trata el directorio / destino como un archivo y lo renombra.
Feyisayo Sonubi
Trabajó para mí :)
Naveen Kumar V
1
  1. Vaya a la línea de comando y acceda al directorio al que desea moverlo. cd folderNamehere
  2. Tipo pwd. Esto imprimirá el directorio que desea mover también.
  3. Luego cambie al directorio donde están todos los archivos con cd folderNamehere
  4. Ahora para mover todos los tipos de archivos mv *.* typeAnswerFromStep2here

Eso moverá todos los archivos de ese directorio al otro.

jrh
fuente
3
Esto no coincidirá con archivos sin ninguna extensión. por ejemplo, si una carpeta tiene los archivos: foo.txt, bar.y bartanto bar.y barno se moverá. Usar en *lugar de *.*se encarga de eso. Pero en ambos casos, los archivos ocultos como: .foobarno se moverán.
Dan
1
mv source_path/* destination_path/

aquí debe colocar una barra diagonal y una *ruta posterior a la fuente para que tome los archivos dentro de source_path en lugar del directorio fuente completo.

Ejemplo: mv /home/username/test/* /home/username/test2/

El comando anterior mueve todos los archivos (a menos que estén ocultos) en el directorio de origen al directorio de destino.

vivek Kumar
fuente
0

intentalo

find ~/Desktop -type f -iname  "*.mp4" -exec mv {} ~/Videos \;

-type con el argumento -type puede especificar el tipo file.on esta declaración que es el archivo medio. si usa -d que significa directorio.

-iname: el método más común y obvio para buscar un archivo es usar su argumento -name. si no está seguro de su distinción entre mayúsculas y minúsculas, puede usar el argumento -iname

mv {} y finalmente especificar el directorio de destino y luego mover los archivos allí usando el argumento mv {}

pedram shabani
fuente