¿Cómo muevo archivos y directorios a la carpeta principal en Linux?

Respuestas:

66
encontrar . -maxdepth 1 -exec mv {} .. \;

esto moverá archivos ocultos también.

Recibirá el mensaje:

mv: no se puede mover `. ' a `../. ': dispositivo o recurso ocupado

cuando intenta moverse .(directorio actual) pero eso no causará ningún daño.

John T
fuente
1
También moverá todos los archivos de todos los subdirectorios al padre del directorio actual. Solía -maxdepth 1estar seguro.
phaphink
1
Ahora dice: mv: no puede moverse ./scripts' to ../scripts': directorio no está vacío
1
Debe tener un directorio llamado scripts en su directorio principal Y en su directorio actual. Tendrá que cambiar el nombre de este antes de moverlo.
phaphink
1
Funcionó, pero dejó una información muy importante: debe ejecutarla desde el subdirectorio. Además, esto no eliminará el subdirectorio en sí mismo, por lo que debe hacer una copia de seguridad de un directorio y hacer un rmdir en el subdirectorio.
crafter
90

Vine aquí porque soy nuevo en este tema también. Por alguna razón, lo anterior no me funcionó. Lo que hice para mover todos los archivos de un directorio a su directorio principal fue:

cd to/the/dir
mv * ../
Ben Fransen
fuente
12
Sin embargo, esto no mueve el archivo oculto
Wavesailor
1 transatlántico:(cd ${ANDROID_NDK_HOME}/android-ndk-r14b/ && mv * ../)
Dawid Drozd
10

Escriba esto en el shell:

mv *.* ..

Eso mueve TODOS los archivos un nivel más arriba.

El personaje *es un comodín. Por *.deblo tanto , moverá todos los archivos .deb y Zeitgeist.*moverá Zeitgeist.avi y Zeitgeist.srt una carpeta hacia arriba, ya que, por supuesto, ..indica el directorio principal.

Para mover todo, incluidas las carpetas, etc., solo use en *lugar de*.*

Gil
fuente
3
esto no funcionó con los directorios! o los archivos ocultos
Funciona con directorios, al menos para mí.
maaartinus
55
¿Quieres *no *.*incluir directorios
Chris S
Es un buen documental
BlackBurn027
6

No puede ser más simple que:

mv * ../

Para mover también archivos ocultos:

mv /path/subfolder/{.,}* /path/ 

mves un comando para mover archivos, *significa todos los archivos y carpetas y ../es la ruta al directorio principal.

William Edwards
fuente
2

En bash puedes usar shopt -s dotglob para hacer que * coincida con todos los archivos y moverlos simplemente

shopt -s dotglob; mv * ..

Esta no es la mejor solución ya que la configuración es permanente para el shell hasta que la cambie por

shopt -u dotglob

Pero creo que es bueno saberlo.

maaartinus
fuente
44
Llamarlo en un subnivel: (shopt -s dotglob && mv * ..). De esa manera, la opción solo es local para esa subshell.
Martin Ueding
Buena respuesta: es simple, incluye archivos ocultos y no causa un error al copiar ''. y '..'
Daniel Howard el
1

Un método que no causa errores y funciona siempre:

ls -1A . | while read -r file                                                    
do                                                                                  
    mv "./${file}" ..                                                            
done
djhaskin987
fuente
1
find . -maxdepth 2 -type f -exec mv {} .. \;

Usé una variación de lo anterior para mover todos los archivos de las subcarpetas al padre.

Obtuve datos en carpetas por año, pero descubrí que al usar metadatos podría tenerlos todos en la misma carpeta, lo que facilitó la administración.

p.ej.

/data/2001/file_1
/data/2002/file_2
/data/2003/file_3
Bill Bixby
fuente
0

Suponiendo que todos sus archivos ocultos comienzan con un punto seguido de una letra o un número (que deberían), puede usar

mv * .[A-Za-z0-9]* ..

La .[A-Za-z0-9]*parte es asegurarse de que no intente moverse .o avanzar .., lo que podría fallar.

Phaphink
fuente
0

Es simple mover todos los archivos y carpetas al directorio principal en Linux.

Vaya a esa carpeta y use este comando:

mv * /the full path

Por ejemplo, si sus archivos y carpetas son los siguientes:

/home/abcuser/test/1.txt 
                   2.txt
                   3.jpg
                   4.php
                   1folder
                   2folder

Vaya a esa carpeta a través de cd:

cd /home/abcuser/test
mv * /home/abcuser

Todos sus archivos y carpetas se moverán a la carpeta abcuser (directorio principal).

Abhishek
fuente
2
Gracias @Gareth, estaba a punto de hacer lo mismo. Abhishek, por favor no publique ningún enlace no relacionado, ¿qué sentido tiene eso? Además, verifique su formato por favor. Además, /the full pathno funciona en Linux, tienes que escapar de espacios con /the\ full\ path.
slhck
0
find -type f|while read line; do mv $line ${line##*/}; done
Adler
fuente
Gracias por contribuir con una respuesta. Si bien esto podría funcionar en escenarios simples, la tubería finden while readuna mala manera de utilizar find, y mejores respuestas ya se han publicado.
Scott
-1

cambie al subdirectorio y ejecute el siguiente comando para copiar o mover archivos.

Por ejemplo: a es el directorio principal yb es el subdirectorio, queremos mover / copiar todos los archivos de b a a (subdirectorio al directorio principal).

cd b
cp * ..
mv * ..
M Ikram
fuente
¡Bienvenido a Super User! Esto duplica otra respuesta y no agrega contenido nuevo. No publique una respuesta a menos que realmente tenga algo nuevo que aportar.
DavidPostill