2

Каталог A и B имеет много подкаталогов с почти одинаковым содержимым. Каталог B может иметь более новые файлы и некоторые подкаталоги, которых нет в каталоге A. Когда файлы в каталоге B более новые, я хочу, чтобы те перезаписывали файлы в каталоге A. Когда B содержит подкаталоги, которых нет у A, я хочу, чтобы каталоги B были объединены с результатами. Итак, я предполагаю, что все, что я говорю, - это объединение двух каталогов с помощью команд, доступных в Solaris и OSX. Я работаю локально на OSX, но нужно будет выполнить ту же процедуру на коробке Solaris. Я нашел пару методов. Первый подход заключается в использовании tar:

cd A
tar -cvf content.tar *
cp content.tar ../B
tar -uvf content.tar *
cp content.tar ../
mv A A_backup; mv B B_backup
tar -xvf content.tar

(Вот это да! что кажется грязным)

Другой подход:

cd B
tar cf - . |(cd ../A; tar xvf -)

(Это объединяет все в A)

Проблема, с которой я сталкиваюсь, может быть связана с уверенностью. Я не знаком с методами и не могу понять, что происходит. Я не вижу, какие файлы были перезаписаны или какие папки или файлы существовали в B, которых не было в A.

Есть ли способ лучше?

2 ответа2

2

Оказывается, rsync можно использовать для локальных каталогов.

rsync -av B A
0

Mac OS X имеет ditto:

ditto [-v] [-V] [-X] [<options>] src ... dst_directory

В своей первой форме Ditto копирует один или несколько исходных файлов или каталогов в каталог назначения. Если целевой каталог не существует, он будет создан до того, как будет скопирован первый источник. Если каталог назначения уже существует, то исходные каталоги объединяются с предыдущим содержимым пункта назначения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .