Verwenden von md5sum und date zum Aktualisieren von Dateien mit cp

570
lecarrera

Ich verwende cp -up --backup=tDateien zum Kopieren von meinem Computer in die Cloud und umgekehrt, aber manchmal ändert sich das Datum für einige Minuten (oder ich denke sogar Sekunden, da ich denselben Dateistempel sehe), während ich die kopierte Datei und die Sicherungskopie miteinander vergleiche. Beim Vergleich der md5-Hash-Nummer beider Dateien sind sie gleich. Meine Frage ist also, ob es für jede Datei möglich ist, dass für den Fall, dass das Datum der zu kopierenden Datei jünger ist als das Datum der Datei im Ziel, zuerst geprüft wird, ob die MD5-Hash-Nummer unterschiedlich ist, bevor die Kopie erstellt wird Wenn beide die gleiche Nummer haben, darf die Datei nicht kopiert werden.

1

1 Antwort auf die Frage

1
Deltik

Verwenden Sie dies rsyncmit dem -cFlag ( --checksum), das Dateien anhand der Prüfsumme und nicht nach Änderungszeit und -größe vergleicht.

Beispiel

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 

Beachten Sie, dass ich zwei identische Dateien zu zwei verschiedenen Zeitpunkten erstellt habe, die Prüfsummen jedoch identisch sind:

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: - 

Mit 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 

Die Datei wurde nicht kopiert.

Ein anderer Lauf mit 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 

Die Datei wurde kopiert.

Vielen Dank für die Antwort. Ich füge -u zu den Optionen hinzu. -u war obligatorisch, da eine ältere Datei über eine neue kopiert wird, wenn sie eine andere MD5-Hashnummer hat. Mein erstes "Aber" ist mit der Geschwindigkeit. Ich benutze ein Webdav-Laufwerk, und es ist merklich langsamer als cp. Das andere Problem ist, ich weiß nicht warum, es bewahrt den Zeitstempel nicht, wenn ich den Befehl in einem Makefile verwendet habe. Der Befehl lautet: rsync -v -u -c -P -a. Der Zeitstempel bleibt jedoch erhalten, wenn ich ihn direkt verwendet habe. Egal, es spielt keine Rolle, aber es macht mich einfach fertig. lecarrera vor 7 Jahren 0