Có thể định cấu hình Rsync để xác minh nội dung của tệp trước khi chúng được đồng bộ hóa hay không. Tôi đã nghe nói về tổng kiểm tra, nhưng tôi đã biết rằng tổng kiểm tra chỉ lấy mẫu. Tôi muốn chuyển một tập tin chỉ khi nó là nội dung được thay đổi và không dấu thời gian, là có một cách để làm điều đó với bất kỳ các chế độ rsync. Trong kịch bản của tôi, hãy nói tệp sample.text sẽ được tạo mỗi tuần và tôi muốn đồng bộ hóa nó với máy chủ từ xa chỉ khi nội dung của sample.text được thay đổi, vì nó được tạo mỗi tuần, dấu thời gian rõ ràng sẽ thay đổi. Nhưng tôi chỉ muốn chuyển đổi về thay đổi nội dung.Có thể rsync xác minh nội dung trước khi đồng bộ hóa
Trả lời
Có, bạn nên đọc hướng dẫn sử dụng.
$ man rsync | grep "\--checksum"
-c, --checksum skip based on checksum, not mod-time & size
Rsync khá phức tạp. Tôi khuyên bạn nên ôm ấp thời gian với trang người đàn ông và thử nghiệm với dữ liệu thử nghiệm trước khi sử dụng nó cho bất kỳ điều gì quan trọng từ xa.
Hầu hết thời gian, mọi người sử dụng rsync -ac source dest
.
$ man rsync | grep "\--archive"
-a, --archive archive mode; same as -rlptgoD (no -H)
Và đó -rlptgoD
rác có nghĩa là: recursive
, copy symlinks as symlinks
, preserve permissions
, preserve times
, preserve group
, preserve owner
, preserve device files (super-user only)
, preserve special files
, và skip based on checksum, not mod-time & size
Các -c
hoặc --checksum
thực sự là những gì bạn đang tìm kiếm, và giả thiết của bạn rằng nó chỉ mẫu mtime và kích thước là sai.
+ cho _cuddle thời gian với trang người đàn ông và thử nghiệm với dữ liệu thử nghiệm_ - Lời khuyên cực kỳ tốt –
Xem tùy chọn --checksum
trên trang người rsync.
Ngoài ra, tùy chọn --size-only
sẽ là lựa chọn nhanh hơn nếu bạn biết chắc chắn rằng thay đổi nội dung cũng có nghĩa là thay đổi kích thước.
Ví dụ:
#!/bin/bash
echo > diff.txt
rsync -rvcn --delete /source/ /destination/ > diff.txt
second_row=$(sed -n '2p' diff.txt)
if [ "$second_row" = "" ]; then
echo there was no change
else
echo there was change
fi
Bạn thực sự cần thêm một số giải thích về lý do mã này hoạt động - bạn cũng có thể thêm nhận xét trong chính mã đó - ở dạng hiện tại của nó không cung cấp bất kỳ lời giải thích nào có thể giúp phần còn lại của cộng đồng hiểu những gì bạn đã làm để giải quyết/trả lời câu hỏi. – ishmaelMakitla
Nếu không có thay đổi dòng thứ hai của diff.txt trong chế độ tiết của rsync trống, sed kiểm tra dòng thứ hai này. – oldbowman
bạn đã thử man page của rsync? -c, --checksum Điều này thay đổi cách rsync kiểm tra xem các tệp đã được thay đổi và cần chuyển khoản hay chưa. Nếu không có tùy chọn này, rsync sử dụng "kiểm tra nhanh" (theo mặc định) sẽ kiểm tra kích thước và thời gian sửa đổi cuối cùng của mỗi tệp giữa người gửi và người nhận. –