Sử dụng rsync để di chuyển (không sao chép) các tập tin giữa các thư mục?


54

Tôi đã sử dụng rsync để sao chép tập tin một thời gian. Tôi hiểu rằng rsync nhanh hơn cp khi một số tệp cần truyền đã có trong thư mục đích, chỉ chuyển chênh lệch gia tăng (tức là "deltas").

Nếu điều này là chính xác, liệu có bất kỳ lợi thế nào khi sử dụng rsync để di chuyển nội dung của thư mục A , giả sử, một thư mục B , với B trống không?

Thư mục A có gần 1TB dữ liệu (và hàng triệu tệp trong đó). Việc chuyển sẽ được thực hiện qua một mạng cục bộ ( AB nằm trên các hệ thống tập tin khác nhau , cả hai được gắn trên siêu máy tính, ví dụ ANFSBánh ).

Ngoài ra, tôi nên sử dụng cờ nào để yêu cầu rsync di chuyển (không sao chép) các tệp từ A sang B (nghĩa là xóa A khi quá trình chuyển đã kết thúc thành công)?


7
Tôi không nghĩ rsynccó thể thay thế mv. Tôi hy vọng mvsẽ nhanh hơn trên hầu hết các loại hệ thống tệp khi nguồn và đích nằm trong cùng một hệ thống tệp, bởi vì rsyncsẽ phải tạo một bản sao bất kể là gì và mvcó thể thoát khỏi việc thay đổi một vài mục trong thư mục. Thứ gần nhất tôi có thể tìm thấy rsync mvlà một --remove-source-fileslệnh, nhưng nó không xóa các thư mục.
jw013

1
Cảm ơn @ jw013! Chỉ cần làm rõ, các tệp nằm trên các hệ thống tệp khác nhau và việc chuyển sẽ được thực hiện trên mạng . Bạn có biết nếu điều đó vẫn sẽ làm mvnhanh hơn?
Amelio Vazquez-Reina

1
Chà, mvkhông thể hoạt động trên một mạng - nó sẽ phải dựa vào một mount cục bộ (ví dụ NFS). Nếu nút cổ chai là mạng, rsynccó lẽ sẽ nhanh hơn mvrsynccó thể thực hiện nén.
jw013

2
Nhân tiện, cp-utùy chọn sao chép tệp nguồn nếu nó mới hơn tệp đích hoặc khi tệp đích bị thiếu
vội vàng

Câu trả lời:


69

Bạn có thể chuyển --remove-source-filessang rsync để di chuyển tệp thay vì sao chép chúng.

Nhưng trong trường hợp của bạn, không có điểm nào trong việc sử dụng rsync, vì đích đến trống. Một đồng bằng mvsẽ làm công việc nhanh nhất có thể.

Trong trường hợp của bạn, điều có thể tạo ra sự khác biệt về hiệu suất là sự lựa chọn giao thức mạng, nếu bạn có lựa chọn giữa NFS, Samba, sshfs, sftp, rsync trên ssh, tar piped vào ssh, v.v. Tốc độ tương đối của các phương thức này phụ thuộc về kích thước tệp, băng thông mạng và ổ đĩa và các yếu tố khác, vì vậy không có cách nào để đưa ra lời khuyên chung, bạn sẽ cần chạy điểm chuẩn của riêng mình.


6
Chỉ cần nhắc lại những gì Caleb nói, nếu bạn lo lắng về tham nhũng do ví dụ như một mạng không ổn định, rsync có thể có ý nghĩa, vì nó xác minh mọi tệp mà nó viết bằng cách kiểm tra các khối khi nó ghi chúng.
Daniel S. Sterling

5
các --remove-source-fileschỉ xóa những file trong nguồn. nếu bạn muốn xóa nguồn của chúng tôi, bạn sẽ không phải thực hiện rm -rf (hoặc findtất cả các thư mục và vượt qua -delete) trên nguồn sau khi rsync chạy thành công?
Trevor Boyd Smith

1
@ DanielS.Sterling rsync không kiểm tra khối sau khi viết chúng (nó sử dụng tổng kiểm tra để tìm phần nào của các tệp hiện có đã được cập nhật và cần được đồng bộ hóa). Bạn có thể thực hiện đồng bộ hóa thứ hai với --checksumyêu cầu xác minh kết quả của đồng bộ hóa thứ nhất.
Clément

19

--remove-source-fileskhông xóa thư mục, tôi đưa ra các lệnh sau để di chuyển tệp qua ssh:

rsync -avh --progress --remove-source-files /home/user/mystuff/* user@external.server:/home/user/backup
find . -type d -empty -delete

Cá nhân tôi thích --progresstính năng này, vì tôi thực hiện chuyển khoản này một cách thủ công. Xóa nó nếu bạn đang sử dụng một tập lệnh. Tôi hy vọng rằng nó làm chậm chuyển giao nhẹ. Các findtùy chọn xóa của lệnh chỉ xóa các thư mục rỗng - không sử dụng rm -rf, vì nó có thể xóa các thư mục không rỗng trong trường hợp một tập tin không được chuyển giao. Các -deletetùy chọn bật các -depthtùy chọn sao cho cây thư mục rỗng sẽ bị xóa khỏi "đáy" lên.


3
-deleteđẹp hơn nhiều so với -exec rmdir {} +vv
lkraav

1
Tôi sẽ bỏ qua dấu hoa thị vì và chỉ có dấu gạch chéo / có đường dẫn nếu thực hiện việc này cục bộ. Nếu bạn sử dụng dấu hoa thị, rsync sẽ bỏ qua các tệp bị ẩn như .htaccess hoặc .htpasswd (nếu có)
Svetoslav Marinov

16

Nói chung như Gilles cho biết không có lợi thế nào khi sử dụng rsyncđể di chuyển tệp khi mvsẽ thực hiện cùng một công việc đơn giản hơn và không có khả năng tăng tốc giữa các hệ thống tệp thông thường.

Tuy nhiên, có một số thời điểm khi có một lợi thế. Đặc biệt, nếu bạn có bất kỳ nghi ngờ nào về tính ổn định của nguồn, đích hoặc máy đang thực hiện công việc, việc sử dụng rsyncmang lại cho bạn khả năng tiếp tục. Đây có thể là một lợi thế đáng chú ý nếu bạn chuyển rất lớn và, giả sử, lưới điện của bạn không đáng tin cậy. Sử dụng rsync sẽ là một cách ổn định hơn để tránh hỏng dữ liệu trong trường hợp xảy ra lỗi và chọn nơi bạn rời đi.


4
Tôi muốn nói rằng đây là một lợi thế rất lớn. Trên thực tế, tôi muốn nói mvlà chỉ tốt hơn nếu mục tiêu và nguồn nằm trong cùng một phân vùng, do đó mvchỉ chỉnh sửa siêu dữ liệu của tệp thay vì thực hiện một bản sao.
Tên của

2
Một lần tôi cần rsyncthay vì mv là khi tôi muốn giữ cấu trúc thư mục (nếu bạn sử dụng --relative).
Sridhar Sarnobat

14

sẽ có bất kỳ lợi thế nào khi sử dụng rsync để di chuyển nội dung của thư mục A, giả sử, một thư mục B, với B trống?

Tôi đã thấy mình trong một tình huống mà rsync IS nhanh hơn mv đơn giản vì mv không thể xử lý số lượng tệp trong thư mục. Tôi có 1,8 triệu ảnh từ camera an ninh đã chạy trong 20 ngày và lệnh mv thoát khi bị lỗi vì không thể phân bổ tài nguyên.

rsync tuy nhiên, dường như xử lý tất cả các tệp mà không có vấn đề.


1

Nếu bạn muốn hợp nhất đệ quy các thư mục ... di chuyển một thư mục vào một thư mục khác có tên thư mục có khả năng trùng lặp , thì vui lòng xem câu trả lời của tôi ở đây trên serverfault.com. mvthực hiện công việc kém khi các thư mục tồn tại cùng tên và rsyncsao chép (đọc + ghi dữ liệu đầy đủ) mỗi tệp thay vì chỉ di chuyển chúng (chỉ đọc và ghi siêu dữ liệu).


0

Không có cách nào để thực sự di chuyển các tệp bằng cách sử dụng rsync như lệnh mv Linux sẽ làm. Bằng cách sử dụng --remove-source-files, về cơ bản, bạn đang sao chép tệp vào đích và sau đó xóa các tệp (trừ thư mục) khỏi nguồn. Điều này có thể đạt được mục đích của bạn để di chuyển tệp nhưng bạn sẽ KHÔNG tiết kiệm thời gian hoặc thao tác i / o.

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.