Bắt rsync để di chuyển tệp từ nguồn đến đích?


15

Là rsync là một lựa chọn tốt cho dự án của tôi?

Tôi phải:
- sao chép tệp từ thư mục nguồn sang thư mục đích qua SSH,
- đảm bảo tất cả các tệp được sao chép,
- xóa các tệp nguồn sau khi sao chép.
- nếu tôi có tên xung đột, tôi phải đổi tên tệp.

Có vẻ như tôi có thể sử dụng tùy chọn: --remove-source-files (để xóa các tệp nguồn)
Nhưng làm thế nào rsync quản lý xung đột, tôi có thể có quy tắc không?

Trường hợp sử dụng cho dự án của tôi:

Tôi chạy tính toán khoa học trên máy chủ A và kết quả được chèn vào thư mục "process", với mỗi phép tính tôi có một kho lưu trữ như thế này: / process / calc1.
Bây giờ tôi muốn chuyển kho "/ calc1" sang máy chủ B (tôi nhận / process / calc1) và xóa "calc1" khỏi máy chủ A.
... Trong một phép tính khác tôi nhận được "/ process / calc2" trên máy chủ A, ý tưởng cũng là để di chuyển thư mục "calc2" trong thư mục "/ process /" trên máy chủ B, sau đó tôi có trên máy chủ B:
- / process / calc1
- / process / calc2
(và / process / trên máy chủ A trống).

Làm thế nào rsync sẽ quản lý xung đột (trên máy chủ B) nếu tôi có một thư mục khác như "/ process / calc1" trong máy chủ A sau khi tính toán mới (nếu "/ process / calc1" đã tồn tại trên máy chủ B)?

Có thể thêm quy tắc với rsync và đổi tên "/ process / calc1" bằng "process / calc1R2" trong máy chủ B không? Vân vân (vd: calc1R3)?

Cảm ơn.

Câu trả lời:


11

Nếu bạn thực sự muốn sử dụng rsync, có vẻ như bạn sẽ cần một số kết hợp của --backup, --backup-dir và --suffix. Gần nhất tôi nghĩ bạn có thể nhận được là với một cái gì đó như thế này

rsync -abv --suffix R1 --remove-source-files src/ dst/

Điều này sẽ làm gần với những gì bạn muốn, nhưng nó sẽ không đổi tên các tệp theo cách bạn muốn. Tùy chọn --suffix sẽ thêm văn bản vào cuối tệp hiện có, nhưng nó chỉ thực hiện điều này cho xung đột đầu tiên. Nếu bạn chạy lại nó, nó sẽ ghi đè lên bản sao lưu đầu tiên của bạn. Bạn sẽ phải thay đổi giá trị hậu tố đó mỗi khi lệnh chạy, nó sẽ hoạt động nếu bạn sử dụng một cái gì đó có dấu thời gian, chẳng hạn như sau:

rsync -abv --suffix `date +%Y%m%d%k%M%S` --remove-source-files src/ dst/

Tôi không chắc liệu điều này có quá mức cho những gì bạn đang theo đuổi hay không, nhưng nó sẽ đáp ứng yêu cầu của bạn.


Tôi có thể có các tệp lớn sau khi tính toán, vì vậy có lẽ tốt hơn là sử dụng rsync (trong trường hợp gặp sự cố mạng).
user44782

1

Như tên ngụ ý, rsync được sử dụng để đồng bộ hóa các tệp. Khi "đồng bộ hóa", điều này có nghĩa là các tệp trên nguồn và đích giống nhau. Điều đó dường như không giống như những gì bạn muốn làm.

Có vẻ như bạn chỉ muốn di chuyển một số tập tin. Bạn không cần sử dụng rsync cho điều đó. Có vẻ như bạn đang sử dụng linux hoặc BSD. Bạn có thể sử dụng mv -n trên ssh. Tùy chọn -n không ghi đè lên các tệp hiện có. Đây không phải là tự động 100%. Tuy nhiên, tôi không thấy cách tập tin có thể tồn tại trong trường hợp của bạn. Các tập tin sẽ được sao chép từ nguồn đến đích và sau đó xóa khỏi nguồn. Bạn có muốn chạy các tính toán tương tự một lần nữa? Có phải đó là lý do tại sao bạn sẽ kết thúc với các tập tin có cùng tên? Tôi khuyên bạn nên thêm số chạy hoặc số lô vào tên thư mục. Dù sao thì bạn cũng muốn điều đó rõ ràng. Bạn có quyền kiểm soát thư mục được đặt tên như thế nào không? Còn chi tiết nào nữa không? Tôi khuyên bạn nên đặt các lệnh trong một tập lệnh bash hoặc tương tự.


Trong một số trường hợp, tôi phải chạy lại phép tính tương tự (và đó là lý do tại sao tôi kết thúc với các tệp có cùng tên). Bạn nói đúng, nối thêm một lần chạy là một ý kiến ​​hay: trong tìm kiếm lệnh mmv -a (Tôi hy vọng nó hoạt động ở chế độ ssh, ai đó đã sử dụng dòng lệnh này?). Tôi có quyền kiểm soát thư mục được đặt tên như thế nào.
user44782

Nó hầu như không được cài đặt trên máy. Nếu đó là máy của bạn, bạn có thể cài đặt nó mặc dù. Dựa trên Debian: sudo apt-get install mmv Bạn cũng có thể xem xét sshfs hoặc NFS và có các tệp đầu ra trực tiếp đến đích cuối cùng. Trừ khi có nhu cầu về vị trí trung gian (kiểm tra, sửa đổi, v.v.). Nếu liên kết giữa hai máy là không đáng tin cậy, đó là một ý tưởng tồi tất nhiên. Đề nghị của Paul là tốt. Mặc dù, việc thêm số chạy ngay từ đầu có lẽ sẽ có tổ chức hơn.
d -_- b

1
Làm thế nào để bạn sử dụng "mv -n" trên ssh? Bạn có thể sử dụng mv trên sshfs.
guettli

Ops ... Vâng, điều đó làm cho nó rõ ràng hơn.
d -_- b

-1

Tóm lại, đối với SSH, hãy sử dụng:

Truy cập qua shell từ xa:

Kéo: rsync [TÙY CHỌN ...] [USER @] HOST: SRC ... [DEST]

Đẩy: rsync [TÙY CHỌN ...] SRC ... [USER @] HOST: DEST

Tất cả đều được giải thích bằng rsync (1).

Đối với kịch bản nó cho một cronjob, để tự động rsync qua ssh mà không yêu cầu mật khẩu, hãy xem xét ssh-agent (1).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.