Как скопировать один (большой) каталог в другой, изменив только отличающиеся файлы?

Как скопировать один (большой) каталог в другой, изменив только отличающиеся файлы?

У меня есть каталог a и каталог b. Они большие. b почти идентичен a. «почти» означает, что различаются 4-5 файлов, и я не знаю, какие именно. Я хочу скопировать b в a, но только те файлы, которые различаются. Я в bash.

(нет, я не могу просто удалить a и заменить его на b, потому что 1) a контролируется версиями 2) полная копия (или mv) заняла бы слишком много места. Я хочу скопировать только отличающиеся файлы).

решение1

Для этого вы можете использовать rsyncкоманду, которую я использую:rsync -tr "folder to copy from" "folder to copy to"

напримерrsync -tr /home/me/stuff/* /home/me/otherstuff/

решение2

Это также можно сделать с помощью старого доброго cp:

Спасибо srcspider за напоминание об использовании -T!

cp -ruT old-dir new-dir

решение3

Еще один хороший вариант — Unison (http://www.cis.upenn.edu/~bcpierce/unison/), особенно если на самом деле нет "источника" и "назначения". Каждый каталог является корнем, и Unison синхронизирует их и сохраняет метаданные для будущих синхронизаций. Он предлагает как командную строку, так и графический интерфейс, который можно легко запланировать через cron.

Я использую его для создания резервной копии моего Dropbox на локальном устройстве NAS, на котором не может работать клиент Dropbox.

решение4

Вы можете сравнить два каталога.

diff -r dir1 dir2

он покажет вам список файлов, которые отличаются

Связанный контент