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 find
confiar 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 xargs
serí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.