Làm cách nào để loại trừ các tệp trong rsync?


12

Tôi đang sử dụng máy chủ Ubuntu 12.04, bây giờ tôi muốn sao lưu một số tệp bằng rsync, đây là một thử:

rsync -aAX $HOME/Documents/* $HOME/Backups/TEST --exclude={$HOME/Documents/another/*,$HOME/Documents/temp/*} 

Như bạn có thể thấy, tôi muốn sao lưu tất cả các tệp trong thư mục $ HOME / Tài liệu vào thư mục $ HOME / Sao lưu / KIỂM TRA , nhưng loại trừ các tệp trong thư mục kháctạm thời . Nhưng tôi đã thất bại, rsync vẫn sao chép các tệp trong cả hai thư mục bị loại trừ:

ls $HOME/Backups/TEST/another
test

kiểm tra là một tệp trong thư mục khác và nó cũng được sao chép mặc dù tôi loại trừ tệp trong rsync, tại sao? Làm thế nào để cho những tập tin đó thực sự bị loại trừ?

Câu trả lời:


11

Có một số vấn đề với lệnh rsync của bạn (cũng xem manpage cho rsync để được giải thích chi tiết về quy tắc bộ lọc).

  • chúng ta cần một --excludelệnh cho mỗi mẫu cho trước.
  • các đường dẫn đã cho cần phải liên quan đến đường dẫn nguồn (không có đường dẫn tuyệt đối).
  • các tùy chọn cần phải được đưa ra trước khi chúng tôi nêu nguồn và đích.

Ví dụ của bạn, cú pháp sau sẽ hoạt động:

rsync -avAX --exclude=another/ --exclude=temp/ ~/Documents/ ~/Backups/TEST

Lưu ý rằng nếu một mẫu loại trừ kết thúc với /nó tham chiếu đến một thư mục. Nếu bạn bỏ qua cả hai, các tệp và thư mục có tên đó sẽ bị loại trừ. Thay thế nó bằng ký tự đại diện *để loại trừ tất cả các tệp hoặc thư mục với chuỗi đó trong tên của chúng.


6
Đây không phải là hoàn toàn chính xác. Tôi không chắc nó hoạt động như thế nào, nhưng từ thử nghiệm, --exclude=/foosẽ loại trừ thư mục footrực tiếp trong nguồn, nhưng --exclude=foosẽ loại trừ bất kỳ thư mục nào có tên foo, ngay cả trong các thư mục con.
Sparhawk

10

Bạn có thể thấy dễ dàng hơn để thêm .rsync-filtertệp trong thư mục nguồn của mình và sử dụng -Ftùy chọn.

Từ trang người đàn ông:

-F: Tùy chọn -F là một tốc ký [...] cho quy tắc này:

 --filter='dir-merge /.rsync-filter'

Điều này cho rsync tìm kiếm các tệp .rsync-filter trên mỗi thư mục đã được rắc qua hệ thống phân cấp và sử dụng các quy tắc của chúng để lọc các tệp trong quá trình chuyển.

Ví dụ: trong $ HOME / Documents / .rsync-filter

# you can add comments in filter files

- /another/
- /temp/

Thay vì -, bạn cũng có thể viết toàn bộ từ exclude.

Bây giờ bạn có thể

rsync -aAX -F $HOME/Documents/ $HOME/Backups/TEST/
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.