-1

Я разместил следующий вопрос в stackoverflow, но люди предлагают, чтобы я разместил здесь вместо этого:

У меня есть две директории, dirA и dirB . Я хочу переместить все в dirB , которые отличаются от dirA (контрольная сумма отличается, не мод-раз) в новый каталог dirC.

Я смотрю на команду rsync -c , но кажется, что rsync может копировать только из одного каталога в другой вместо сравнения, а затем копировать в новый каталог.

Я также могу написать длинный скрипт, который использует diff -qr чтобы получить имена файлов, а затем проанализировать вывод и соответствующим образом скопировать файлы, но я действительно хочу избегать синтаксического анализа чего-либо (вот где вещи нуждаются в тестировании и отладке).

Как это можно сделать надежно?

1 ответ1

0

Вам придется использовать --compare-dest . Из руководства:

--compare-dest = DIR:

Эта опция указывает rsync использовать DIR на целевом компьютере в качестве дополнительной иерархии для сравнения файлов назначения с выполнением передач (если файлы отсутствуют в каталоге назначения). Если в DIR найден файл, идентичный файлу отправителя, файл НЕ будет перенесен в каталог назначения. Это полезно для создания редкой резервной копии только тех файлов, которые изменились по сравнению с более ранней резервной копией.

Ваша команда будет что-то вроде:

rsync -aHxvc --progress  --compare-dest=dirA/ dirB/ dirC/ 

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

rsync -aHxvc --dry-run --progress  --compare-dest=dirA/ dirB/ dirC/ 

которая покажет вам операции, которые будут выполнены, без их фактического выполнения: это даст вам возможность контролировать, что команда действительно выполняет то, что вы хотите.

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