У меня есть каталог 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
он покажет вам список файлов, которые отличаются