Bạn luôn có thể bittorrent nó giữa các máy chủ, nhưng tôi không chắc cách tự động hóa nó.
Tôi không làm điều này thường xuyên vì vậy tôi sẽ không viết kịch bản. Thay vào đó, tôi sẽ xây dựng một lớp lót lớn để thực hiện công việc. Về mặt kỹ thuật, đây không phải là một lệnh, mà là tất cả trên một dòng. Không khó để kịch bản-ify nếu bạn làm điều này thường xuyên.
$ md5sum bigfile > bigfile.md5 ; export BIGFILE="notdone" ; while [ "$BIGFILE" eq "notdone" ] ; do rsync --checksum --partial bigfile* user@remotehost:path/to/put/it/in/ ; ssh user@remotehost "cd path/to/put/it/in/; md5sum -c < bigfile.md5" | grep -Ev 'OK$' | [ `wc -l` == "0" ] && BIGFILE="done" ; done
Điều này chia ra thành:
$ md5sum bigfile > bigfile.md5 ; \ # create our own checksum
export BIGFILE="notdone" ; \ # set our check variable
while [ "$BIGFILE" == "notdone" ]; do \ # recheck variable state after each pass
rsync --checksum --partial bigfile* \ # call rsync to copy
user@remotehost:path/to/put/it/in/ ; \ # and call ssh to check
ssh user@remotehost \ # connect with ssh
"cd path/to/put/it/in/; md5sum -c < bigfile.md5" \ # and run the check
| grep -Ev 'OK$' \ # ignore good output
| [ `wc -l` == "0" ] \ # if we didn't find one
&& BIGFILE="done" ; \ # set our get-out-of-jail card
done \ # and we're done
Bạn phải thiết lập SSH để đăng nhập vào máy chủ của mình với ủy quyền chính để chạy nó mà không cần tương tác. Nếu bạn làm như vậy, hãy đặt một câu lệnh echo vào đó để cho bạn biết nó ở đâu.
Đã thử nghiệm, nhưng tôi hy vọng các tùy chọn rsync có thể được điều chỉnh.
--checksum
tùy chọn để buộc nó kiểm tra nội dung của everyfile thay vì sử dụng phím tắt giả sử các tệp có cùng kích thước + dấu thời gian là OK.