Przenieś zawartość folderu do folderu nadrzędnego - Linux Command Line

18

Mam folder A, który zawiera folder B zawierający wiele plików. Chciałbym się pozbyć folderu B, ale nie jego zawartości. Chcę, aby te treści były w folderze A. Jak mogę to zrobić w wierszu polecenia?

NewLinuxUser
źródło

Odpowiedzi:

28
$ cd /path/to/folderA
$ mv folderB/* .
$ rmdir folderB
Wstrzymano do odwołania.
źródło
1
folder mvB / *. ? co to za kropka
NewLinuxUser
8
Uważaj na pliki kropkowe (pliki, których nazwa zaczyna się od.), Ponieważ nie będą one zawierać tych plików. Czy mv folderB/.* .też je przenieś. @NewLinuxUser, kropka w pytaniu jest aliasem katalogu roboczego (w tym przypadku folderu A).
Brian
1
To się nie powiedzie, jeśli folderB/folderBistnieje, więc wystrzegaj się używania go w skryptach.
Filipiny
1
To również kończy się niepowodzeniem, jeśli folderBzawiera niesamowitą liczbę plików. Zobaczysz z bash: /bin/mv: Argument list too longpowodu użycia *. Jeśli tak jest w przypadku użycia mvw połączeniu z, findjak podano przez @amphetamachine, lub zfor loop
Javier de la Rosa
2

Szybka odpowiedź:

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

Odporna na kod odpowiedź:

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"
amfetamachina
źródło