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

17

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

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

Ответы:

25

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

$ cp -R /path/to/bar/* /path/to/foo
coneslayer
источник
Да, в чем я не был уверен, так это в рекурсивности и в том, как не закончить тем, что внутри 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.

drew7721
источник
1
Два человека уже предложили команду cp, и поэтому ваш ответ кажется излишним. Потратив несколько минут, чтобы объяснить, как выбранные вами аргументы работают лучше, чем другие предложения, помогут сделать ваш ответ более полезным.
music2myear
1
Флаг -u обновляется, только если файл в источнике новее, чем файл в месте назначения. Смотрите: man cp -> -u, --update: копировать, только если файл SOURCE новее, чем файл назначения, или когда файл назначения отсутствует
drew7721
Добавьте эту информацию к вопросу (используйте «Изменить» под вашим постом), чтобы люди могли увидеть эту полезную информацию в самом ответе.
music2myear