rsync với 'tập tin từ' trong ký tự đại diện


9

[Tôi đã phải thay đổi ví dụ để làm rõ rằng có các thư mục con.]

Hãy nói rằng tôi muốn tạo lại một tập hợp con của hệ thống phân cấp của tôi. vì lý do, hãy nói rằng tôi muốn sao lưu các tệp trong filelist.conf

# cat rsync-list
ab*
bb*

# find .
.
./abc
./abc/file-in-abc
./abd
./abd/file-in-abd
./aca
./bba
./bbc
./bca
./rsync-list

Tôi đã hy vọng rằng

rsync -arv --include-from=rsync-list --exclude='*' . /somewhere-else

sẽ tạo lại abc, abd, bba và bbc. vấn đề là nó không đi vào thư mục ab *, vì vậy nó không làm abc / file-in-abc và abd / file-in-abd. vì vậy, theo nghĩa này, ab * không thực sự là một ký tự đại diện được mở rộng thành abc và abd và sau đó được rsynced.


*không phù hợp /trong việc mở rộng ký tự đại diện. Sử dụng **thay thế.
muru

1
thêm hai gợi ý: [1] -vv sẽ giải thích tại sao các mẫu tạo ra nó hay không. [2] để bao gồm một thư mục con, các đường dẫn của nó cần được đưa vào. ví dụ: nếu /etc/logrotate.d/ nằm trong danh sách, nó sẽ bị bỏ qua trừ khi / etc cũng nằm trong danh sách.
ivo Welch

Câu trả lời:


26

Các manpage liệt kê những năm tùy chọn:

--exclude=PATTERN       exclude files matching PATTERN
--exclude-from=FILE     read exclude patterns from FILE
--include=PATTERN       don't exclude files matching PATTERN
--include-from=FILE     read include patterns from FILE
--files-from=FILE       read list of source-file names from FILE

--files-fromlà cho tên tệp chính xác và --include-fromdành cho các mẫu, vì vậy bạn có thể muốn thử thay thế.

Sử dụng include-from, bạn không cần chỉ định +, nhưng bạn cần loại trừ mọi thứ khác. Ví dụ: đã cho:

$ ls -v1 source
image1.tiff
...
image700.tiff
$ cat includes
image7*.tiff

Sau đó, tôi chỉ có thể đồng bộ hóa image7*.tiffbằng cách sử dụng:

rsync -aP --include-from=includes --exclude='*' source/ target

Trang này cũng cho biết, trong INCLUDE/EXCLUDE PATTERN RULESphần:

  • a '*' khớp với bất kỳ thành phần đường dẫn nào, nhưng nó dừng lại ở dấu gạch chéo.
  • sử dụng '**' để khớp với bất cứ thứ gì, kể cả dấu gạch chéo.

7

Bạn có thể sử dụng --include-fromthay vì --files-fromnếu bạn muốn sử dụng ký tự đại diện. filelist.confnên trông như thế này:

+ /usr/lib/ld-* 
+ /usr/bin/gcc*
+ /etc/passwd
+ /etc/nonexisting
- *

Bạn cần chỉ định +hoặc -bao gồm hoặc loại trừ trong tệp. Các - *quy tắc ở cuối là cần thiết để làm bao gồm quy tắc làm việc kể từ khi tất cả mọi thứ được bao gồm theo mặc định. Đừng đặt cái này trước hoặc nó ghi đè lên các quy tắc bao gồm.

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.