Использование md5sum и даты для обновления файлов с помощью cp

551
lecarrera

Я использую cp -up --backup=tдля копирования файлов с моего компьютера в облако и обратно, но иногда дата меняется на несколько минут (или, я полагаю, даже секунды, когда я вижу ту же самую отметку даты файла), когда я сравниваю скопированный файл и резервную копию. Сравнивая номер хеша md5 для обоих файлов, они совпадают. Поэтому у меня вопрос: возможно ли для каждого файла, что в случае, если дата копируемого файла новее, чем дата файла в месте назначения, сначала проверьте, отличается ли номер хеша md5, перед тем как сделать копию, и если оба имеют одинаковый номер, не копировать файл.

1

1 ответ на вопрос

1
Deltik

Используйте rsyncс -cфлагом ( --checksum), который сравнивает файлы по контрольной сумме, а не по времени и размеру изменения.

пример

root@node51 [/tmp]# mkdir source root@node51 [/tmp]# mkdir destination root@node51 [/tmp]# echo "version 1" > source/file.txt root@node51 [/tmp]# sleep 1 root@node51 [/tmp]# echo "version 1" > destination/file.txt 

Обратите внимание, что я создал два одинаковых файла в два разных времени, но их контрольные суммы идентичны:

root@node51 [/tmp]# md5sum */file.txt 81127ad129dd2249f5ab0667ca0aeb84 destination/file.txt 81127ad129dd2249f5ab0667ca0aeb84 source/file.txt root@node51 [/tmp]# stat */file.txt File: 'destination/file.txt' Size: 10 Blocks: 1 IO Block: 512 regular file Device: 15h/21d Inode: 674358 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-08-10 13:14:12.710354355 -0500 Modify: 2016-08-10 13:14:12.710354355 -0500 Change: 2016-08-10 13:14:12.710354355 -0500 Birth: - File: 'source/file.txt' Size: 10 Blocks: 1 IO Block: 512 regular file Device: 15h/21d Inode: 674234 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-08-10 13:14:07.198447196 -0500 Modify: 2016-08-10 13:14:07.198447196 -0500 Change: 2016-08-10 13:14:07.198447196 -0500 Birth: - 

Использование rsync -avcP:

root@node51 [/tmp]# touch source/file.txt root@node51 [/tmp]# rsync -avcP source/ destination/ sending incremental file list ./  sent 87 bytes received 22 bytes 218.00 bytes/sec total size is 10 speedup is 0.09 

Файл не был скопирован.

Другой прогон, использующий rsync -avP:

root@node51 [/tmp]# touch source/file.txt root@node51 [/tmp]# rsync -avP source/ destination/ sending incremental file list file.txt 10 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/2)  sent 123 bytes received 35 bytes 316.00 bytes/sec total size is 10 speedup is 0.06 

Файл был скопирован.

Большое спасибо за ответ. Я добавляю -u к опциям. -u был обязательным, потому что он скопирует старый файл поверх нового, если у них другой хэш-номер md5. Мое первое «но» со скоростью. Я использую диск webdav, и он заметно медленнее, чем cp. Другая проблема заключается в том, что, я не знаю почему, он не сохраняет метку времени, если я использовал команду в make-файле. Команда: rsync -v -u -c -P -a. Но отметка времени сохраняется, если я использовал ее напрямую. Во всяком случае, это не имеет значения, но это просто пугает меня. lecarrera 7 лет назад 0

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