Лучший способ синхронизации файлов – копировать только СУЩЕСТВУЮЩИЕ файлы и только если NEWER, чем целевой

Я делаю эту синхронизацию локально на Ubuntu 12.04. Обычно файлы представляют собой небольшие текстовые файлы (код).

Я хочу скопировать (сохранение метки mtime) из source каталога в target но я хочу только скопировать, если файл target уже существует и старше source .

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

Я действительно буду копировать из source в несколько target каталогов. Я упоминаю об этом, если это повлияет на выбор решения. Тем не менее, я могу легко запустить свою команду несколько раз, указав новую target каждый раз, если это то, что требуется.

  • синхронизировать файлы рекурсивно между двумя папками, где файлы меньше 24 часов
  • Как ограничить полосу пропусканием облачным хранилищем, установленным davfs?
  • Опция rsync для отключения проверки?
  • Настройка тайм-аута rsync TCP
  • Проблема Ecryptfs с rsync
  • rsync 3.1.0 создает пустые каталоги резервных копий
  • Ошибка Rsync 23: могу ли я сообщить, какие файлы не были переданы?
  • Обнаружение на удаленном хосте, на котором были обработаны файлы
  • One Solution collect form web for “Лучший способ синхронизации файлов – копировать только СУЩЕСТВУЮЩИЕ файлы и только если NEWER, чем целевой”

    Я считаю, что вы можете использовать rsync для этого. Ключевым наблюдением будет необходимость использования переключателей --existing и – --update .

      --existing skip creating new files on receiver -u, --update skip files that are newer on the receiver 

    Такая команда сделала бы это:

     $ rsync -avz --update --existing src/ dst 

    пример

    Скажем, у нас есть следующие образцы данных.

     $ mkdir -p src/; touch src/file{1..3} $ mkdir -p dst/; touch dst/file{2..3} $ touch -d 20120101 src/file2 

    Что выглядит следующим образом:

     $ ls -l src/ dst/ dst/: total 0 -rw-rw-r--. 1 saml saml 0 Feb 27 01:00 file2 -rw-rw-r--. 1 saml saml 0 Feb 27 01:00 file3 src/: total 0 -rw-rw-r--. 1 saml saml 0 Feb 27 01:00 file1 -rw-rw-r--. 1 saml saml 0 Jan 1 2012 file2 -rw-rw-r--. 1 saml saml 0 Feb 27 01:00 file3 

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

     $ rsync -avz --update --existing src/ dst sending incremental file list sent 12 bytes received 31 bytes 406.00 bytes/sec total size is 0 speedup is 0.00 

    Если мы touch исходного файла так, чтобы он был новым:

     $ touch src/file3 $ ls -l src/file3 -rw-rw-r--. 1 saml saml 0 Feb 27 01:04 src/file3 

    Другой запуск команды rsync :

     $ rsync -avz --update --existing src/ dst sending incremental file list file3 sent 115 bytes received 31 bytes 292.00 bytes/sec total size is 0 speedup is 0.00 

    Мы можем видеть этот file3 , так как он новее и что он существует в dst/ , он отправляется.

    тестирование

    Чтобы убедиться, что все работает до того, как вы отключите команду, я бы предложил использовать другой --dry-run rsync , --dry-run . Давайте добавим еще один -v так что вывод rsync более подробный.

     $ rsync -avvz --dry-run -update --existing src/ dst sending incremental file list delta-transmission disabled for local transfer or --whole-file file1 file2 is uptodate file3 is newer total: matches=0 hash_hits=0 false_alarms=0 data=0 sent 88 bytes received 21 bytes 218.00 bytes/sec total size is 0 speedup is 0.00 (DRY RUN) 
    Interesting Posts

    Итак, каковы логические ядра процессора (в отличие от физических ядер процессора)?

    Как искать все подкаталоги для поиска одного с определенным именем?

    Подсказка Android bash повреждена с длинным pwd

    Настройте УАТС для переадресации вызовов на мой телефон только в случае

    Debian dhcpcd и wpa_supplicant 802.1X подключены, интернет перестает работать после истечения срока аренды dhcp

    Показать символ в позиции в файле

    Можно ли использовать скрипт bash для создания демона?

    Синхронизация каталога с автоматическим обнаружением сверстников

    ld не может найти -lQt5Multimedia

    Может ли Linux поддерживать Mirror Bootable Disk с LVM, например, IBM-AIX / HP / Solaris UNIX?

    Громкость микрофона на звуковой карте USB очень низкая, параметры snd_usb_audio?

    Добавление сто тысяч слов в словарь проверки правописания на Fedora 24

    Как заблокировать весь сетевой трафик от моего текущего пользователя

    Установка сервера centos на виртуальной машине

    Передача специальных символов из Perl-скрипта в csh

    Linux и Unix - лучшая ОС в мире.