Sự khác biệt giữa các tùy chọn xóa rsync là gì?


118

Tôi thấy trên trang man rsync có một số deletetùy chọn, nhưng không thực sự hiểu sự khác biệt giữa chúng. Sự khác biệt giữa các tùy chọn này là gì?

 --del                   an alias for --delete-during
 --delete                delete extraneous files from dest dirs
 --delete-before         receiver deletes before transfer (default)
 --delete-during         receiver deletes during xfer, not before
 --delete-delay          find deletions during, delete after
 --delete-after          receiver deletes after transfer, not before
 --delete-excluded       also delete excluded files from dest dirs

2
Tại sao --delete-befoređược mô tả là (default)? Tôi không thể hiểu những gì (default)có nghĩa là.
Marco Marsala

1
Nó không còn được chỉ định làm mặc định trong mantrang cho rsync version 3.1.2 protocol version 31. Tuy nhiên, dự đoán của tôi về phiên bản có văn bản được trích dẫn là nếu bạn chỉ sử dụng --deletechứ không phải --delete-WHEN, thì như thể bạn đã chỉ định --delete-WHENnơi WHENmặc định before.
Tom Hale

Câu trả lời:


114
  • --del/--delete_during: Xóa các tệp khỏi thư mục đích khi chúng được sao chép (lưu bộ nhớ so với --delete-before: --delete-beforethực hiện quét riêng để tìm kiếm xóa)

  • --delete: Xóa các tệp trong thư mục đích nếu chúng không tồn tại trong thư mục nguồn.

  • --delete-before: Xóa tệp trong thư mục đích trước khi sao chép tệp có cùng tên từ thư mục nguồn

  • --delete-during: Xóa tệp trong thư mục đích WHILE sao chép tệp có cùng tên từ thư mục nguồn

  • --delete-delay: Đánh dấu xóa trong khi chuyển, nhưng đợi cho đến khi quá trình chuyển hoàn tất

  • --delete-after: Người nhận xóa sau khi chuyển, không phải trước đó ... Nếu một phần khác của rsync chuyển các tệp bổ sung sang nơi khác, bạn sẽ muốn điều này thay vì --delete-delay, vì sẽ --delete-delayquyết định những gì sẽ xóa ở giữa chuyển, trong khi --delete-afterkiểm tra thư mục để tìm tệp cần được xóa SAU mọi thứ đã kết thúc.

  • --delete-excluded: Xóa các tệp khỏi thư mục đích được loại trừ rõ ràng khỏi việc chuyển từ thư mục nguồn.

Điểm của rsync không sao chép, nó đang lưu trữ. Đây là một dấu hiệu đặc biệt quan trọng. Xử lý các tập tin bị xóa / thay đổi là rất quan trọng và trong nhiều trường hợp là sắc thái.

Các --deletelá cờ nói riêng là một trong Tôi đã nhìn thấy hơi say lên nhiều lần. Rất nhiều người sử dụng rsync để di chuyển các tệp sang bộ nhớ ưu tiên thấp và trong trường hợp này bạn muốn các tệp bạn đang di chuyển đến vẫn còn EXIST trong thư mục đích. Đó không phải là xóa: --deleteđảm bảo rằng, khi bạn xóa một tệp khỏi thư mục nguồn, nó cũng bị xóa khỏi thư mục đích của bạn, vì vậy đích của bạn không bị đầy rác ... Một khi thấy một chàng trai xóa sạch bản sao lưu của anh ta bằng cách đặt một ổ đĩa mới và không tắt tập lệnh rsync hàng đêm của mình. Script thấy rằng thư mục nguồn hiện đang trống và nó đã xóa mọi tệp trong thư mục đích, vì vậy chúng khớp với nhau.

Hầu hết các tùy chọn khác là không gian hoặc hiệu suất liên quan. Khi bạn xóa các tệp rất quan trọng nếu bạn muốn đảm bảo việc chuyển tiền thành công trước khi bạn làm bất cứ điều gì, nhưng nếu thiết bị của bạn quá nhỏ để xử lý 2 bản sao của tất cả thông tin, bạn cần xóa khi bạn đi, v.v. ít lập dị vì lịch sử lâu đời của nó trên nhiều nền tảng: một số tùy chọn đã được thêm vào để những người đã quen với một số hành vi nhất định sẽ không bị nhầm lẫn.


3
Vậy --delete và --delete-before có giống nhau không? man rsync không nói khi --delete xóa các tập tin.
ppr

@ppr: Phụ thuộc vào hệ thống. Lý do nó có rất nhiều tùy chọn cụ thể là vì xóa trên Solaris! = Xóa trên HP-UX! = Xóa trên AIX! = Xóa trên Linux.
Satanicpuppy 6/07/2015

Khi kết nối toàn bộ một thư mục, có delete-afterxóa từng tệp ở giữa đồng bộ hóa hay chỉ sau khi toàn bộ thư mục đã được nhân đôi? Tôi nghĩ delete-afterlà đủ cho nhu cầu của mình nhưng tôi không còn chỗ trống trên thiết bị khi sao lưu một trong các ổ đĩa của mình.
Sridhar Sarnobat

1
@ Sridhar-Sarnobat: Hoặc. Nó di chuyển mọi thứ nó sẽ di chuyển, và khi nó hoàn thành, nó bắt đầu xóa mọi thứ. Nếu bạn muốn xóa nó trước khi nó di chuyển mọi thứ, hãy sử dụng --delete-during
Satanicpuppy

2
Sau một số kinh nghiệm, tôi thấy rằng thậm chí delete-duringkhông phải lúc nào cũng ngăn chặn no space left on device(trên Linux). Vì vậy, delete-beforelà cách duy nhất được đảm bảo để tránh nó (như khi phản chiếu một ổ đĩa gần đầy, và ổ đĩa đích cũng gần đầy).
Sridhar Sarnobat

1

Có hai điều đang diễn ra:

  1. Ai xóa
  2. Khi nó xảy ra

Người gửi hoặc người nhận có thể được hướng dẫn thực hiện xóa (Tôi không chắc tại sao điều này lại quan trọng). Vì vậy, khi rsync từ một máy tính kết nối với máy chủ rsync ở phía bên kia, điều này sẽ xác định ai đang ban hành lệnh xóa một cách hiệu quả.

Khi điều đó xảy ra khá dễ dàng ... trước đó có nghĩa là tất cả các tệp sẽ bị xóa và THEN rsync sao chép các tệp. trong khi có nghĩa là khi nó đi qua danh sách các tệp, nó sẽ xóa chúng khi đến với chúng, và sau đó có nghĩa là nó đợi cho đến khi tất cả các tệp được chuyển qua và sau đó xóa phía từ xa. Điều này chỉ quan trọng khi việc chuyển tiền bị gián đoạn.


Tôi khá chắc chắn rằng không có tùy chọn nào trong số này có liên quan đến việc xóa mọi thứ từ phía người gửi . Tất cả chúng (AFAIK) liên quan đến việc xóa mọi thứ từ phía người nhận . Ngoài ra, bạn nói: "trước đây có nghĩa là tất cả các tệp đã bị xóa và THEN rsync sao chép các tệp" - điều này có đúng không? Tôi chỉ muốn --delete-beforexóa những tệp cần phải biến mất chứ không phải tất cả các tệp! Nhưng tôi đoán có thể rsync xóa mọi thứ và sau đó chuyển qua dữ liệu "mới" (có thể không thay đổi) ...
Quuxplusone

1
À, "xóa từ phía người gửi" được rsync hỗ trợ, nhưng tên của tùy chọn đó là --remove-source-files.
Quuxplusone

1

Một điểm đáng nói khác là nếu thư mục nguồn của bạn kết thúc /*, thì rsync sẽ chỉ xem xét các tệp đó chứ không phải chính thư mục đó (và do đó không có các tệp mà bạn muốn xóa ở đích).

Nếu bạn đang chỉ định tùy chọn xóa ở trên, nhưng rsync có vẻ như không xóa, thì hãy kiểm tra để đảm bảo bạn không vô tình hả hê và cung cấp danh sách các tệp khi bạn muốn nói chính thư mục đó.

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.