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

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

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

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

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

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) 
  • rsync не использует -files-from option?
  • Прерывая rsync с помощью ctrl-c, следует ли использовать `--partial` или` --append`?
  • Исправлена ​​ошибка с файловой системой rsync "Только для чтения (30)"
  • Как rsync файлы с номером имени файла больше, чем число?
  • SSH known_hosts игнорируется на одной машине
  • Некоторые папки всегда отсутствуют с помощью Rsync на сервере
  • Как я могу заставить rsync использовать шифрование и сжатие для передачи файлов после авторизации соединения?
  • backup / on файловая система ntfs зашифрована
  • Rsync и учитывать изменения имени / пути
  • Сравнение двух каталогов на разных серверах
  • rsync: как включить файлы с именем, заканчивающимся в определенной строке
  • Interesting Posts

    Как выводить сравнение значений в отдельных файлах

    Найти варианты свопинга, которые в настоящее время используются

    Bash: вывести несколько строк в однострочные команды

    Верхние имена пользователей в принципалах Kerberos при входе в SSH с паролем

    Почему не удается root на одной машине изменить nfs смонтированный контент с другого компьютера?

    mutt: привязать CTRL + c к прерыванию (CTRL + g)

    Сканирование nmap занимает 50 минут

    Не удается установить и использовать драйверы nvidia (Wheezy)

    Заменить столбец в одном файле столбцом из другого с помощью awk?

    Лучшая файловая система для съемных носителей

    Может ли это нанести вред, если я отключусь без закрытия приложений?

    Как войти в систему как суперпользователь \ администратор в Scientific Linux 6 LiveCD?

    Инструмент для добавления иерархической структуры для вывода, подобно дереву

    Mint изменяет маршрут по умолчанию, когда eth0 возвращается и ломает существующие соединения tcp

    Как указать пароль пользователя для ftp

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