Déplacer le contenu du dossier dans le dossier parent - Linux Commandline

18

J'ai un dossierA qui contient le dossierB qui contient beaucoup de fichiers. Je voudrais me débarrasser du dossier B, mais pas de son contenu. Je veux que ce contenu soit dans le dossier A. Comment puis-je accomplir cela sur la ligne de commande?

NewLinuxUser
la source

Réponses:

28
$ cd /path/to/folderA
$ mv folderB/* .
$ rmdir folderB
En pause jusqu'à nouvel ordre.
la source
1
dossier mVB / *. ? quel est le point?
NewLinuxUser
8
Attention aux fichiers de points (fichiers dont le nom commence par.) Car cela ne les inclura pas. Faites mv folderB/.* .pour les déplacer aussi. @NewLinuxUser, le point dans votre question est un alias pour le répertoire de travail (dans ce cas, le dossier A).
Brian
1
Cela échoue s'il folderB/folderBexiste, alors méfiez-vous de l'utiliser dans des scripts.
filipos
1
Cela échoue également si folderBcontient une quantité insensée de fichiers. Vous verrez à bash: /bin/mv: Argument list too longcause de l'utilisation de *. Si tel est le cas, utiliser mven combinaison avec findcomme indiqué par @amphetamachine, ou avec unfor loop
Javier de la Rosa
2

Réponse rapide:

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

Réponse résistante au code:

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"
amphétamachine
la source