У меня есть два одинаковых файла, на локальной машине и на удаленной. Их размеры равны, и файл на локальном компьютере новее, чем на удаленном, но 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)
-t
флаг, чтобы он не устанавливал правильное время изменения нового файла, и последующие вызовы rsync пытались обновить более новый файл. Благодарность!rsync -a
если у вас нет веских причин не делать этого.-a
в этом случае это привело бы к другой проблеме, а именно к ошибкеskipping directory .
. Причина была в том, что-a
содержит,-r
и я думаю, что если в папке не было никаких каталогов, это выдает эту ошибку. Обсуждается в этом сообщении-a
по умолчанию, а затем явно отключить любой параметр, который он включает, который вам не нужен, с--no-
префиксом. В вашем случае это было быrsync -a --no-r
.