Me gustaría mover todos los archivos y carpetas de un directorio a una de sus subcarpetas. ¿Cómo puedo hacer eso?
Estoy usando BusyBox y Linux.
ex:
mover todos los archivos y carpetas /my/path/
a/my/path/subfolder/.
Las soluciones para copiar y luego eliminar no son asequibles.
Gracias.
Respuesta1
mv * subfolder
Por supuesto, no se podrá mover el directorio "subcarpeta" dentro de sí mismo, pero todo lo demás se moverá.
Respuesta2
Las soluciones que usan *
(ampliadas por shell) no funcionarán con demasiados objetos en /my/path/
. En tal caso obtendrás:
argument list too long
Este enfoque no utiliza *
:
cd /my/path/ &&
find . -mindepth 1 -maxdepth 1 ! -name subfolder -exec mv -t subfolder/ {} +
Desafortunadamente -mindepth
, -maxdepth
las opciones de find
no son compatibles con POSIX; Ninguna -t
de las opciones lo mv
es, creo.
Esta variante debe satisfacer POSIX:
cd /my/path/ &&
find . ! -name . -prune ! -name subfolder -exec mv {} subfolder/ \;
(me adaptéesta respuesta de Unix y Linux SE). Lamentablemente, solicita mv
todos los objetos encontrados, por lo que es lento.
Enfoque alternativo rápido, si tan solo pudiera crear directorios nuevos (inicialmente ni /my/path/subfolder/
deberían /my/subfolder/
existir):
- cambiar el nombre
path/
asubfolder/
, - recrear
path/
, - entra .
subfolder/
path/
Tenga en cuenta que en un sistema de archivos basado en inodos esto debería ser igualmente rápido, sin importar cuántos objetos haya en path/
. El código:
cd /my/ &&
test ! -e subfolder/ && mv path/ subfolder/ &&
mkdir path/ &&
mv subfolder/ path/
En este caso usé &&
mucho para enfatizar que el procedimiento debe abortar si alguno de sus pasos falla. Sin embargo, este enfoque es inconveniente si necesita path/
o subfolder/
tiene permisos, propiedad, etc. no predeterminados.
Respuesta3
La forma más sencilla de hacer esto es:
mv !(subfolder) subfolder
'!' significa NO, similar a los lenguajes de programación, donde mv moverá todos los archivos y carpetas a la subcarpeta requerida con la excepción de la subcarpeta.
Aquí se describen cosas adicionales como mover carpetas ocultas y carpetas de puntos:https://askubuntu.com/questions/91740/how-to-move-all-files-in-current-folder-to-subfolder
Respuesta4
Es posible que desee consultar el mv
comando. Puede intentar buscar todos los archivos y carpetas en un directorio y excluir un subdirectorio y luego copiar todo lo encontrado en ese subdirectorio usando find
el mv
comando.
Ver una pregunta similar sobre desbordamiento de pilahttps://stackoverflow.com/questions/4612157/how-to-use-mv-command-to-move-files-except-those-in-a-specific-directory