Intereting Posts
Невозможно обновить пароль для пользователя Скопировать файлы без шифрования (ssh) в локальной сети Как изменить высоту заголовка в стандартных приложениях GTK и тех, у кого есть заголовки / CSD на Gnome 3.20 Xming не запускается, если работает как суперпользователь Linux – журнал о том, какое имя пользователя и пароль были опробованы расширение загрузки, перемещение корней LUKS Почему сегменты данных и кода полностью перекрываются в Linux? выполнить бит в каталогах, но не файлы Как настроить скорость передачи по умолчанию для 802.11 («WiFi») в Debian 7 GNU / Linux? как я мог бы пройти переменную внутри awk? update-initramfs не удалось после обновления, чтобы растянуться с jessie удалить хост из списка завершения для ssh в zsh grep и sed в конкретных Почему `sudo su -l -c" java "` работает, даже если `sudo su -l -c 'echo $ PATH" `отображает местоположение двоичного файла java? Почему для чтения устройства требуется разрешение администратора?

Почему rsync пытается скопировать файл, который уже обновлен?

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

Я вызываю rsync следующим образом:

rsync -nv -e "ssh -p 2222" user@host:/data/file.fif data/file.fif 

(если я не использую опцию -n , она инициирует операцию копирования)

В документах Rsync явно указано, что это не должно происходить:

 Rsync finds files that need to be transferred using a "quick check" algorithm (by default) that looks for files that have changed in size or in last-modified time. 

Выходы из stat :

 # remote file File: `data/fif/Skovorodko_Olga_45_raw.fif' Size: 1137551966 Blocks: 2221784 IO Block: 4096 regular file Device: fd00h/64768d Inode: 286338 Links: 1 Access: (0664/-rw-rw-r--) Uid: ( 1037/ platon) Gid: ( 1047/ platon) Access: 2013-08-08 18:40:16.907581658 +0400 Modify: 2013-07-16 12:01:09.158763284 +0400 Change: 2013-07-16 12:01:09.158763284 +0400 # local file File: `data/fif/Skovorodko_Olga_45_raw.fif' Size: 1137551966 Blocks: 2221792 IO Block: 4096 regular file Device: 801h/2049d Inode: 12987232 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1005/ platon) Gid: ( 1003/ platon) Access: 2013-08-08 19:02:57.146223369 +0400 Modify: 2013-08-08 19:02:57.146223369 +0400 Change: 2013-08-08 19:02:57.146223369 +0400 

Почему это происходит?

ОБНОВИТЬ:

Выполнение файла результатов rsync --size-only не копируется:

 delta-transmission enabled Skovorodko_Olga_45_raw.fif is uptodate total: matches=0 hash_hits=0 false_alarms=0 data=0 sent 14 bytes received 114 bytes 85.33 bytes/sec total size is 1137551966 speedup is 8887124.73 (DRY RUN) 

Алгоритм быстрой проверки будет рассматривать как модифицированный любой файл с разным временем модификации или разным размером. Итак, если ваш целевой каталог имеет более новую версию одного и того же файла, он будет считаться другим, и он будет синхронизирован с исходной версией.

Это ожидаемое (и более безопасное) поведение. Например, давайте предположим, что у вас есть две директории: ~ / src и ~ / dest, каждая из которых имеет файл foobar. В ~ / src / foobar вы пишете «foo», а затем в ~ / dest / foobar пишете «bar». Теперь вы rsync ~ / src в ~ / dest. Что бы вы ожидали?

Оба файла имеют одинаковый размер, но один в ~ / dest более новый. Стандартное поведение Rsync заключается в замене ~ / dest / foobar на ~ / src / foobar. Конечно, файлы могут быть идентичными, и это было бы ненужным, но нет никакого способа узнать это, если вы не будете делать контрольную сумму или сравнивать бит за бит.

Если вы не хотите этого поведения, то есть хотите сохранить более новые файлы в ресивере, вы должны использовать флаг -u (–update).

-u, –update Это заставляет rsync пропускать любые файлы, которые существуют в пункте назначения, и имеет модифицированное время, которое является более новым, чем исходный файл. (Если существующий файл назначения имеет время модификации, равное исходному файлу, оно будет обновляться, если размеры отличаются.)