Я нахожу несколько ответов на вопрос, поэтому хотел спросить людей, которые на самом деле его используют, а не просто хотят сделать самый большой блог, заполняя случайной полу бесполезной информацией.
Сценарий: я rsync -av --progress /dir/a /dir/b
и делаю
свое дело.
Я добавляю новые файлы в / dir / a и снова запускаю ту же команду, он знает, что сделал, и копирует только новые файлы.
Я добавляю новые файлы в / dir / a и переименовываю некоторые файлы в / dir / b, и, возможно, тоже удаляю несколько.
Если я запустлю rsync -av --progress /dir/a /dir/b
снова, что будет скопировано? Просто новые файлы, потому что он знает, что он ранее скопировал, или файлы, которые также были переименованы / удалены, потому что их больше нет.
И в качестве бонуса, если ранее скопированные файлы будут скопированы снова, есть способ , чтобы предотвратить это, так что только новые дополнения к / режу / а копируются?
На данный момент я счастлив проверять вещи вручную, но по мере увеличения данных мне потребуется больше автоматизации для выполнения этой задачи.
-i
Флаг очень удобно. Для каждого файла он дает строку соответствия, которую можно декодировать, чтобы понять, почему он совпадает (флаг для времени мода, флаг для размера и т. Д.)Ответы:
Нет, он не знает, что делал в предыдущем заезде. Он сравнивает данные на принимающей стороне с данными для отправки. С достаточно маленькими данными это не будет очевидным, но когда у вас достаточно больших каталогов, время, потраченное на сравнение перед началом копирования, легко ощутимо.
Проверка по умолчанию для времени и размера модификации файла. От
man rsync
:И:
Обратите внимание, что это не подразумевается под опциями, которые вы использовали.
-a
является:источник
--fuzzy
один раз распознает их как одинаковые в том же каталоге. Использование в--fuzzy
два раза расширяет эту возможность в других местах. Смотритеman rsync
подробности. Конечно, одной из основных причин использованияrsync
является его способность копировать только те части файла, которые изменились. Это может значительно ускорить передачу по сети. Кстати, опция контрольной суммы упомянута выше для объяснения того, какrsync
работает. В большинстве случаев его не следует использовать.Общая
Если я правильно понимаю,
rsync -av
не имеет памяти, поэтому он будет копировать файлы, которые также были переименованы / удалены, потому что они присутствуют в источнике, но больше не присутствуют в цели.подсказки
Используйте опцию
-n
«пробный запуск», чтобы проверить, что происходит перед запускомrsync
командной строки.Обратите внимание на особое значение косой черты после исходного каталога и увидите разницу между
и
который описан в руководстве
man rsync
.пример
Ваш особый случай (добавление файла в исходный каталог «a» и удаление файла из целевого каталога «b») добавит как добавленный файл, так и ранее скопированный файл, поскольку он все еще находится в исходном каталоге. Это будет происходить как с опцией, так и без нее,
-u
и я не знаю никакой опции,rsync
чтобы легко это исправить, если вы хотите сохранить ее в исходном каталоге.Но вы можете удалить его из исходного каталога или поместить имя файла в файл
excluded
и использовать опцию--exclude-from=excluded
(для многих файлов) или просто--exclude=PATTERN
для одного или нескольких файлов.Альтернатива:
unison
Вы можете протестировать инструмент
unison
, который является инструментом синхронизации . Он предоставляет визуальный метод для выявления особых случаев и решения, что делать. Есть версия GUI (unison-gtk
).источник
unison-gtk
течение нескольких лет, и я счастлив с этим. (Яrsync
тоже использую .)Он только копирует новые файлы в / dir / a. Все, что вы делаете в / dir / b, будет игнорироваться, если вы не используете опцию --delete. В этом случае переименованные файлы в / dir / b будут удалены. Это заставит / dir / b стать точно таким же, как / dir / a.
Что касается бонуса, вы имеете в виду как в случае переименования файлов в / dir / a, а затем rsyncing в / dir / b? Я не думаю, что есть способ предотвратить повторное копирование файлов rsync в этом случае.
источник