Phức tạp bao gồm / loại trừ với rsync


14

Tôi đang cố gắng thực hiện cú pháp bộ lọc rsync để thực hiện bao gồm / loại trừ phức tạp và cố gắng đạt được những điều sau:

Include /
Exclude /home
Include /home/user1/*
Include /home/user2/subdir/*

Tôi đã thử nhiều biến thể của cú pháp bộ lọc và mặc dù đã đọc trang man nhiều lần, tôi không thể có được loại hiệu ứng này. Các bộ lọc của Rsync dường như rất mạnh mẽ và tôi cảm thấy khó tin rằng họ không thể xử lý một tình huống phổ biến như thế này.

Câu trả lời:


17

Bạn cần bao gồm tất cả các thư mục mẹ xuống thư mục mong muốn trước khi sử dụng quy tắc loại trừ.

Chẳng hạn, tôi sử dụng như sau trong một kịch bản sao lưu:

rsync -av \ 
--filter='+ /var/' \
--filter='+ /var/backups/' \
--filter='- /var/*' \
/ \
$DEST

Vì vậy, trong trường hợp của bạn, bạn sẽ cần một cái gì đó như sau:

rsync -av \ 
--filter='+ /home/' \
--filter='+ /home/user1/' \
--filter='+ /home/user2/' \
--filter='+ /home/user2/subdir/' \
--filter='- /home/user2/*' \
--filter='- /home/*' \
/ \
$DEST

Thông minh. Mất một thời gian.
yclian

Bằng cách nào đó, khi tôi đọc man rsync, tôi đã hiểu nhầm thứ tự pha trộn thích hợp bao gồm và loại trừ. Tôi mất một giờ để tìm ra nó ...
Adam Ryczkowski

6

Trên dòng lệnh:

rsync --dry-run --verbose --recursive --include=/home/user1 --exclude=/home/* / DEST

Xóa --dry-runđể làm cho nó hoạt động, thay thế "DEST" bằng đích của bạn và thêm người dùng và máy chủ lưu trữ vào nguồn "/" nếu cần.

Từ một tệp quy tắc:

rsync --dry-run --verbose --recursive --filter='merge /etc/rsync/somerules.rules' / DEST

trong đó nội dung /etc/rsync/somerules.rulescó thể là:

+/ /home/user1
-/ /home/*

Bạn nên kiểm tra những điều này và bạn có thể cần thực hiện một số điều chỉnh, nhưng điều này sẽ giúp bạn bắt đầu.


OK, nó hoạt động. Tôi có một trường hợp phức tạp hơn mà tôi đã thêm vào câu hỏi. Phần bổ sung bao gồm không hoạt động với kịch bản subir.
brianmathis
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.