使用 md5sum 和 date 透過 cp 更新文件

使用 md5sum 和 date 透過 cp 更新文件

我過去常常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

文件已被複製。

相關內容