Mover el contenido de la carpeta a la carpeta principal - Linux Commandline

18

Tengo una carpeta A que contiene la carpeta B que contiene muchos archivos. Me gustaría deshacerme de la carpeta B, pero no de su contenido. Quiero que esos contenidos estén dentro de la carpeta A. ¿Cómo puedo lograr esto en la línea de comandos?

NewLinuxUser
fuente

Respuestas:

28
$ cd /path/to/folderA
$ mv folderB/* .
$ rmdir folderB
Pausado hasta nuevo aviso.
fuente
1
carpeta mv B / *. ? que es el punto
NewLinuxUser
8
Tenga cuidado con los archivos de puntos (archivos cuyo nombre comienza con), ya que esto no los incluirá. Haz mv folderB/.* .para moverlos también. @NewLinuxUser, el punto en su pregunta es un alias para el directorio de trabajo (en este caso, la carpeta A).
Brian
1
Esto falla si folderB/folderBexiste, así que tenga cuidado de usarlo en scripts.
filipos
1
Esto también falla si folderBcontiene una cantidad increíble de archivos. Verá bash: /bin/mv: Argument list too longpor el uso de *. Si ese es el caso, use mven combinación con findlo indicado por @amphetamachine, o con unfor loop
Javier de la Rosa
2

Respuesta rápida:

cd /path/to/folderA
find folderB -maxdepth 1 -mindepth 1 -exec mv {} . \;
rmdir folderB

Respuesta resistente al código:

cd /path/to/folderA
folderB_temp="$(mktemp -d -t folderB.XXXXXX)"
mv folderB "$folderB_temp"
find "$folderB_temp/folderB" -maxdepth 1 -mindepth 1 -exec mv {} . \;
rmdir --parents --ignore-fail-on-non-empty "$folderB_temp/folderB"
anfetamaquina
fuente