rsync tất cả các thư mục bắt đầu với một chữ số cụ thể


7

Tôi có thư mục được tải với hàng ngàn thư mục con:

/home/tmp/
          1
          12
          123
          1234
          2345
          234
          3456
          345
          34

Mỗi thư mục con lần lượt có hàng trăm thư mục con mà tôi muốn rsync nếu thư mục con cấp đầu tiên khớp với ...

Những gì tôi cần là một cách để sao chép / rsync chỉ các thư mục bắt đầu bằng một chữ số đã cho [1-9] ...

Những gì tôi nghĩ rằng tôi muốn về cơ bản là thứ gì đó cho phép tôi sử dụng thẻ hoang dã để khớp

rsync -rzvvhP remotehost:/home/tmp/1* /home/tmp/

Tôi muốn rsync đồng bộ hóa

/home/tmp/1/
/home/tmp/12/
/home/tmp/123/
/home/tmp/1234/

thư mục và bất kỳ thư mục con nào họ có nhưng không có bất kỳ thư mục cấp đầu tiên nào bắt đầu bằng một chữ số khác ...

/home/tmp/234/
/home/tmp/2345/
........./3*/
........./4*/ etc..

Những gì tôi đã thử:

rsync -rzvvhP --exclude='*' --include-from=1.txt remotehost:/home/tmp/ /home/tmp/

Trong đó 1.txt chứa:

1
12
123
1234

Khi tôi làm điều này với 2.txt mặc dù rsync dường như vẫn chạy qua tất cả các thư mục bắt đầu bằng 1 và 3, v.v ...

Làm thế nào tôi có thể làm điều này để tôi có thể có một lệnh để rsync chỉ các thư mục bắt đầu với bất kỳ chữ số nào?


1
Tôi không biết đó có phải là vấn đề của bạn không, nhưng bạn có thể muốn bảo vệ dấu hoa thị khỏi sự mở rộng vỏ cục bộ (trước cả khi nó bị rsync). 'remotehost:/home/tmp/1*'thay vì không có dấu ngoặc đơn.
CVn

1
Có chuyện gì với rsync -rzvvhP remotehost:/home/tmp/1* /home/tmp/vậy?
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


20

Những gì bạn đề xuất nên thực sự hoạt động:

rsync -rzvvhP remotehost:/home/tmp/1\* /home/tmp/

(Bạn có thể thoát khỏi việc không trích dẫn *trong hầu hết các trường hợp, vì mẫu remotehost:/home/tmp/1\*không có khả năng khớp với bất kỳ tệp nào nên nó sẽ bị bỏ lại một mình với hầu hết các thiết lập shell.)

Nỗ lực của bạn --exclude='*'không thành công vì trận đấu đầu tiên được áp dụng và trận đấu đầu tiên của bạn cho mọi thứ ( *) nói là loại trừ.

Xem hướng dẫn này để biết một số nguyên tắc chung về bộ lọc rsync. Ở đây, chỉ bao gồm các thư mục bắt đầu bằng 1toplevel và sao chép mọi thứ trong các thư mục con được bao gồm, /1sau đó loại trừ /*.

rsync -rzvvhP --include='/1' --exclude='/*' remotehost:/home/tmp/ /home/tmp/

rsync -rzvvhP --size-only --filter="+ /4*/" --exclude='/*'... là những gì tôi đã kết thúc bằng cách sử dụng ... vấn đề tôi tin rằng vấn đề là loại trừ đang đến trước ... thay đổi điều này từ bao gồm sang bộ lọc hoạt động.
kasdega
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.