我习惯cp -up --backup=t
将文件从我的计算机复制到云端,然后再反向复制,但有时当我比较复制的文件和备份文件时,日期会改变几分钟(我猜甚至是几秒钟,因为我看到相同的文件日期戳)。比较两个文件的 md5 哈希值,它们是相同的。所以我的问题是,对于每个文件,如果要复制的文件的日期比目标文件的日期更新,在复制之前先检查 md5 哈希值是否不同,如果两个数字相同,则不要复制文件。
答案1
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
文件已复制。