¿Cómo muevo todos los directorios a un solo directorio de manera eficiente en la misma carpeta?

¿Cómo muevo todos los directorios a un solo directorio de manera eficiente en la misma carpeta?

Tengo 100 archivos en una sola carpeta, incluida una carpeta llamada "destino". Quiero migrar todos los archivos de esta carpeta a la carpeta de destino (excepto la carpeta de destino).

¿Existe un comando de terminal eficiente para hacer esto?

Respuesta1

Si solo hay archivos (y el directorio de destino) en su directorio, simplemente use mv, en lugar de find:

mv * target

Se quejará de que el "destino" no se puede mover sobre sí mismo, pero todos los archivos estarán en el destino después.

Respuesta2

Utilizar esta

$ mv target ..
$ mv * ../target
$ mv ../target .

Respuesta3

Esto también funciona:

find . -maxdepth 1 ! -name target ! -name . -exec mv "{}" target \;

Una de las ventajas clave de findconfiar demasiado en la finalización de bash es que obtienes los archivos ocultos al mismo tiempo. mv * ...No haré eso.

Quizás podrías optar por algo como:

mv -t target * .[^.]*

O como señala James, podrías recortar el comando de búsqueda para mirar solo los archivos... Y como señaló LoremIpsum, si hay miles de millones de ellos, usarlo xargssería un poco más eficiente:

find . -maxdepth 1 -type f -print0 | xargs -0 mv -t target

Respuesta4

El enfoque de mover el directorio de destino a uno anterior, luego mover todo a él y finalmente volver a moverlo al directorio actual, si está bien. El único problema es que no funciona para un directorio de proyecto git donde necesitamos mantener el historial.

Entonces, para un directorio git, simplemente muévete así:git mv * objetivo -k

El-kLa opción se utiliza para omitir errores de movimiento/cambio de nombre.

información relacionada