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?
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?
Odpowiedzi:
$ cd /path/to/folderA
$ mv folderB/* .
$ rmdir folderB
mv folderB/.* .
też je przenieś. @NewLinuxUser, kropka w pytaniu jest aliasem katalogu roboczego (w tym przypadku folderu A).
folderB/folderB
istnieje, więc wystrzegaj się używania go w skryptach.
folderB
zawiera niesamowitą liczbę plików. Zobaczysz z bash: /bin/mv: Argument list too long
powodu użycia *
. Jeśli tak jest w przypadku użycia mv
w połączeniu z, find
jak podano przez @amphetamachine, lub zfor loop
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"