Переместить содержимое папки в родительскую папку - Linux Commandline


18

У меня есть папка A, которая содержит папку B, которая содержит много файлов. Я хотел бы избавиться от папки B, но не от ее содержимого. Я хочу, чтобы это содержимое было внутри папки А. Как я могу сделать это в командной строке?

Ответы:


28
$ cd /path/to/folderA
$ mv folderB/* .
$ rmdir folderB

1
папка mB / *. ? какая точка?
NewLinuxUser

8
Не упустите точечные файлы (файлы, чье имя начинается с.), Поскольку они не будут включать их. Делай, mv folderB/.* .чтобы переместить их. @NewLinuxUser, точка в вашем вопросе - это псевдоним рабочего каталога (в данном случае папка A).
Брайан

1
Это не работает, если folderB/folderBсуществует, поэтому остерегайтесь использовать его в сценариях.
filipos

1
Это также терпит неудачу, если folderBсодержит безумное количество файлов. Вы увидите bash: /bin/mv: Argument list too longиз-за использования *. Если это так, используйте mvв сочетании с findзаявленным @amphetamachine или сfor loop
Хавьер де ла Роса

2

Быстрый ответ:

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

Кодовый ответ:

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"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.