Почему Rsync каждый раз копирует одно и то же подмножество (неизмененных) файлов?

И тот, который не воссоздает массив каждый раз (хотя требует bash 3.1 или новее):

array=()
while IFS= read -r -p "Next item (end with an empty line): " line; do
    [[ $line ]] || break  # break if line is empty
    array+=("$line")
done

printf '%s\n' "Items read:"
printf '  «%s»\n' "${array[@]}"

См. http://mywiki.wooledge.org/BashFAQ/001 для получения дополнительной информации.

И как всегда, чтобы избежать написания ошибок, прочитайте http://mywiki.wooledge.org/BashFAQ/001 и избегайте tldp-руководств, таких как Advanced bash scripting guide. [ ! d3]

1
задан 26 November 2014 в 02:42

1 ответ

В режиме работы по умолчанию rsync используется время модификации в качестве ключа, чтобы определить, должен ли файл быть перенесен или нет. На странице руководства:

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

Используя параметр --checksums, он будет смотреть на содержимое файла:

-c, --checksum              skip based on checksum, not mod-time & size
1
ответ дан 24 May 2018 в 01:34
  • 1
    Понятно, я обязательно постараюсь сделать это завтра. Но я не понимаю, как это может быть причиной, поскольку в этой папке есть несколько тысяч файлов, и каждый раз копируется только небольшое количество файлов, остальные ведут себя так, как я хочу: копирование только когда они фактически не присутствуют в «папке», – Nick The Swede 26 November 2014 в 03:02
  • 2
    Я сталкивался с подобными проблемами при синхронизации с моего телефона или на внешний диск. Обычно ли файловая система размонтирована? Если вы удалите диск раньше, возможно, что на диск не все записано. О, еще одна возможность - аппаратный сбой (плохие сектора, плохая ОЗУ). Кстати, вы можете использовать --exclude='**/.AppleDouble/', чтобы игнорировать этот каталог. – Lekensteyn 26 November 2014 в 03:06
  • 3
    Спасибо за исключение: я был слишком ленив, чтобы включать какие-либо исключения, но теперь я фактически создал файл исключения, заботясь об этих раздражающих «файлах помощи», забивающих файлы журнала upp. К сожалению, единственное, что произошло с опцией -c, было то, что все было значительно замедлено, но файлы все еще были переданы (на самом деле процесс еще не завершен, хотя через час после его передачи последний из Обычные подозреваемые. – Nick The Swede 26 November 2014 в 19:14
  • 4
    PS: для завершения процесса -c rsync потребовалось 1h20m, после того как он скопировал последний (ненужный) файл. Это действительно нормальное поведение? – Nick The Swede 26 November 2014 в 20:45
  • 5
    @NickTheSwede Параметр -c должен получить контрольную сумму файла, поэтому он должен прочитать полный файл, а не просто посмотреть размер и дату. Возможно, вы могли бы объединить его с сопоставлением mtime / size, взгляните на страницу руководства. Вы действительно уверены, что файлы не изменены? Что произойдет, если вы дважды запустите команду? – Lekensteyn 26 November 2014 в 22:51

Другие вопросы по тегам:

Похожие вопросы: