Điểm:2

rsync tất cả các tệp pdf ngoại trừ trong một số thư mục nhất định?

lá cờ cn

Tôi đang cố gắng hết sức để hiểu hệ thống bộ lọc rsync và nó hoàn toàn làm tôi bối rối.

Tôi có cấu trúc thư mục "kiểm tra" sau đây để cố gắng hiểu ý nghĩa của nó. Không có tùy chọn bộ lọc, đây là tất cả các tệp của tôi:

rsync -amv --dry-run/nguồn/mục tiêu

xây dựng danh sách file... xong
nguồn/
nguồn/1.pdf
nguồn/2.pdf
nguồn/loại trừ_rules.txt
nguồn/filter_rules.txt
nguồn/loại trừ/
nguồn/loại trừ/2.jpg
nguồn/loại trừ/4.pdf
nguồn/thư mục con/
nguồn/thư mục con/1.jpg
nguồn/thư mục con/1.txt
nguồn/thư mục con/3.pdf
nguồn/thư mục con/thư mục con2/
nguồn/subdir/subdir2/6.jpg
nguồn/subdir/subdir2/6.pdf

Tôi chỉ muốn đồng bộ hóa tất cả *.pdf các tệp ngoại trừ trong một số thư mục nhất định, cụ thể là bất kỳ thư mục nào có *loại trừ* trong đó.

Tôi đang sử dụng một tệp có các quy tắc lọc trong đó bằng lệnh sau:

rsync -amv --dry-run --filter='merge /filter_rules'/source /target

filter_rules trông giống như các biến thể sau đây nhưng tôi không thể làm cho chúng tạo ra kết quả mà tôi đang theo đuổi:

-/ *loại trừ*/
+/ *.pdf
-/ *

Lần gần nhất tôi đến là với loại trừ đơn giản:

-/ *loại trừ*/

Sản lượng nào:

xây dựng danh sách file... xong
nguồn/
nguồn/1.pdf
nguồn/2.pdf
nguồn/loại trừ_rules.txt
nguồn/filter_rules.txt
nguồn/thư mục con/
nguồn/thư mục con/1.jpg
nguồn/thư mục con/1.txt
nguồn/thư mục con/3.pdf
nguồn/thư mục con/thư mục con2/
nguồn/subdir/subdir2/6.jpg
nguồn/subdir/subdir2/6.pdf

Làm cách nào để lọc phần còn lại để nhận *.pdf ?

Điểm:1
lá cờ cn

Đối với hậu thế, cuối cùng tôi đã làm được điều này và đây là những hướng dẫn mà tôi ước mình đã có:

  • rsync bắt đầu quá trình lọc với danh sách đầy đủ các tệp
  • các quy tắc bộ lọc được xử lý THEO ĐẶT HÀNG (tôi mất một lúc để có được điều này)
  • Bạn có thể có tất cả các quy tắc phù hợp, nhưng không đúng thứ tự, vì vậy nếu bạn đang sử dụng các tệp bao gồm hoặc loại trừ bên ngoài, chúng có thể cần được sắp xếp lại bằng một tệp bộ lọc cho phép bạn trộn và khớp các quy tắc bao gồm/loại trừ, hoặc được liệt kê trên chính cli
  • đối với mỗi tệp, QUY TẮC LỌC ĐẦU TIÊN RẰNG PHÙ HỢP đặt tệp vào một trong 2 nhóm, bao gồm hoặc loại trừ.
  • Các quy tắc sau quy tắc khớp đầu tiên không được áp dụng!
  • Mỗi quy tắc chỉ hoạt động trên các tệp khiến nó "vượt qua" các quy tắc trước đó không được khớp
  • Các tệp không phù hợp với bất kỳ quy tắc nào được BAO GỒM
  • Quy tắc cuối cùng là quan trọng nhất và không trực quan, và nó có nghĩa là loại trừ mọi thứ không được đưa vào cụ thể CHO ĐẾN ĐIỂM ĐÓ.

Vì vậy, đây là những gì đã kết thúc làm việc:

-/ *loại trừ*/
+/ */
+/ *.pdf
-/ *

Ban đầu, tôi có các quy tắc đó trong các tệp bao gồm và loại trừ riêng biệt và điều đó sẽ không cho phép sắp xếp đúng thứ tự.

TomOnTime avatar
lá cờ pt
Đạo cụ để quay lại và đăng những gì bạn đã học và cách bạn học nó!
Điểm:0
lá cờ jp

Tôi vẫn sử dụng --exclude-from trong rsync của mình, nhưng liên kết này rất hữu ích khi tôi cố gắng để bộ lọc hoạt động.

https://stackoverflow.com/questions/35364075/using-rsync-filter-to-include-exclude-files

chỉnh sửa - OP đã đóng đinh điều này trong câu trả lời của riêng anh ấy, nhưng theo yêu cầu ... một chút hữu ích từ liên kết đó

giải thích:

(cuối cùng chỉ viết lại hướng dẫn nhưng như bạn đã nói, hướng dẫn này hơi> khó hiểu)

Các quy tắc được đọc từ trên xuống dưới mỗi khi tệp phải được chuyển bằng >rsync. Nhưng trong trường hợp của bạn /mnt/data/i-want-to-rsyncthisdirectory/ không> được sao lưu vì bạn loại trừ /mnt và điều này làm đoản mạch các quy tắc bao gồm> của bạn. Vì vậy, giải pháp là bao gồm từng thư mục và thư mục con cho đến >thư mục bạn muốn sao lưu và sau đó loại trừ những gì bạn không muốn sao lưu >thư mục con theo thư mục con.

Lưu ý * ở cuối mỗi loại trừ thư mục con. Nó sẽ ngăn rsync sao lưu các tệp và thư mục nằm trong các thư mục con này, đó là những gì bạn muốn tôi nghĩ. Giải pháp đơn giản hơn: (chỉnh sửa 2)

Bạn thậm chí có thể đơn giản hóa điều này bằng mẫu *** đã được thêm vào trong phiên bản >2.6.7:

  • /mnt/
  • /mnt/dữ liệu/
  • /mnt/data/i-want-to-rsyncthisdirectory/***
  • /mnt/**

Toán tử này cho phép bạn sử dụng ký tự đại diện ** để loại trừ và > do đó chỉ có một dòng loại trừ.

Tôi cũng phát hiện ra rằng bạn có thể hiểu quy tắc bộ lọc nào loại trừ/bao gồm >từng tệp hoặc thư mục nhờ các đối số rsync sau:

--verbose --verbose

Kết hợp với đối số --dry-run, bạn sẽ có thể gỡ lỗi sự cố của mình >:)

lá cờ cn
Cảm ơn đã trả lời! Bạn có thể rút ra các bit hữu ích nhất không, trong trường hợp câu hỏi hoặc câu trả lời bị xóa trong tương lai?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.