Unix: как объединить две директории


17

Скажем, у меня есть две папки с различным содержанием, fooи bar. Как я могу слиться barс fooтем, чтобы:

  • Файлы в fooэтом barнетронуты.
  • Файлы, в barкоторых нет foo, сейчас находятся в foo.
  • Файлы в этом файле fooтакже barбыли заменены файлами из bar.

Ответы:


25

Если я читаю ваши требования правильно, нет никаких файлов , которые идут от fooк bar. Похоже, что вы можете просто скопировать содержимое barв foo, позволяя перезаписывать файлы по мере необходимости (его поведение по умолчанию).

$ cp -R /path/to/bar/* /path/to/foo

Да, в чем я не был уверен, так это в рекурсивности и в том, как не закончить тем, что внутри foo есть просто бар как foo / bar. Но, похоже, это то, чего я хочу :)
Svish

1
Хорошо, если вы сделали cp -R /path/to/bar /path/to/fooэто будет создать каталог barвнутри foo. Тонкий момент.
Конеслайер

1
Примечание: он пропустит скрытые файлы / каталоги bar(т.е. с именами, начинающимися с точки - .) из-за того, как работает глобализация оболочки.
Камиль Мачоровски

9

У меня был очень похожей необходимость: слияние barв fooно файлы , которые находятся в bar не должен перезаписи согласующих файлов foo. В таком случае:

$ cp -R -n /path/to/bar/* /path/to/foo/

1

Попробуй это :

$ cp -r-u-v /path/to/foo/* /path/to/bar/

Из man cp
-u, --update копировать только в том случае, если файл SOURCE новее, чем целевой файл, или если в конечном файле отсутствуют рекурсивные каталоги
-R, -r, --recursive.


1
Два человека уже предложили команду cp, и поэтому ваш ответ кажется излишним. Потратив несколько минут, чтобы объяснить, как выбранные вами аргументы работают лучше, чем другие предложения, помогут сделать ваш ответ более полезным.
music2myear

1
Флаг -u обновляется, только если файл в источнике новее, чем файл в месте назначения. Смотрите: man cp -> -u, --update: копировать, только если файл SOURCE новее, чем файл назначения, или когда файл назначения отсутствует
drew7721

Добавьте эту информацию к вопросу (используйте «Изменить» под вашим постом), чтобы люди могли увидеть эту полезную информацию в самом ответе.
music2myear
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.