Rsync ngoại trừ các thư mục .svn và nội dung phụ của chúng?


10

Xử lý một repo lật đổ và một người dùng mới không hiểu rõ về cách thức hoạt động của nó.

Câu chuyện dài, vì cấu trúc cục bộ của chúng bị rối do sao chép các thư mục .svn ngẫu nhiên về, tôi đã làm như sau:

  • sao chép cấu trúc cục bộ vào một thư mục gọi là dàn
  • đệ quy xóa tất cả các thư mục .svn khỏi thư mục dàn
  • kiểm tra repo vào một "thư mục sạch"

Bây giờ chúng ta đang ở bước cuối cùng - lấy nội dung thư mục dàn để ghi đè lên nội dung sạch.

Tôi cần phải có một lệnh sao chép nội dung của thư mục dàn vào thư mục sạch, loại bỏ mọi thứ chỉ có trong thư mục sạch, NHƯNG để lại các thư mục .svn sạch của thư mục.

Điều này nghe có vẻ như một công việc cho rsync. Lệnh sau có đúng không?

rsync -avr --exclude=.svn* [staging] [clean]

6
Bạn luôn có thể chạy rsyncvới --dry-runtùy chọn để tìm hiểu!
Tim

Hahaha cảm ơn! Không có ý tưởng rằng tùy chọn tồn tại. Nên đọc người đàn ông cẩn thận hơn!
SeanKilleen

Câu trả lời:


31

Các -Clựa chọn cho rsync có thể là những gì bạn muốn.

Đừng để mô tả ngắn trong trang người đàn ông đánh lừa bạn mặc dù. Có vẻ như tùy chọn này chỉ áp dụng cho CVS, nhưng tùy thuộc vào phiên bản rsync của bạn, nó sẽ bỏ qua các tệp của hầu hết mọi hệ thống kiểm soát phiên bản phổ biến đang tồn tại.

# rsync version: 3.0.7

-C, --cvs-exclude           auto-ignore files in the same way CVS does

...

          The exclude list is initialized to exclude the  following  items
          (these  initial  items are marked as perishable — see the FILTER
          RULES section):

                 RCS  SCCS  CVS  CVS.adm   RCSLOG   cvslog.*   tags   TAGS
                 .make.state  .nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak
                 *.BAK *.orig *.rej .del-* *.a *.olb *.o *.obj *.so  *.exe
                 *.Z *.elc *.ln core .svn/ .git/ .bzr/

          then,  files  listed in a $HOME/.cvsignore are added to the list
          and any files listed in the CVSIGNORE environment variable  (all
          cvsignore names are delimited by whitespace).

2
Hãy cẩn thận, vì những tiện ích mở rộng này có thể được sử dụng cho các tệp mà bạn muốn sao chép, vd. *.adành cho Thư viện tĩnh iOS.
Max Chuquimia

Các tệp và thư mục NB bị loại trừ: mọi thư mục có tên "core" không được sao chép, ví dụ / myproj / api / / myproj / core / <- không được sao lưu!
teknopaul

7

Hầu như - điều này nên

rsync -av --exclude='.svn*' [staging] [clean]

hoặc bất kỳ hình thức trích dẫn nào khác ngăn vỏ mở rộng ký tự đại diện. (Các ký tự đại diện sẽ chỉ phù hợp với một tập tin không có tên bắt đầu với --exclude=.svn, nhưng nó tốt hơn không chấp nhận rủi ro, và cũng có thể làm việc một cách chính xác ngay cả khi vỏ được cấu hình để nghẹt thở trên các kí hiệu không phù hợp hoặc để mở rộng chúng vào danh sách rỗng. )

-rđã được bao gồm trong -a. Phần bổ sung rchỉ là thừa, nó sẽ không gây hại gì.

--excludelàm cho các tệp khớp với đối số của nó không được sao chép, cũng không được xem xét để duyệt qua đệ quy. Khó khăn thông thường với rsync là đi theo một cách khác, ngoại trừ một thư mục ngoại trừ một số phần nhất định của nó. Xem bộ lọc Rsync: chỉ sao chép một mẫu cho một số mẹo.

Trong trường hợp cụ thể này, loại trừ các thư mục kiểm soát phiên bản là một cách nhanh chóng để có được những gì bạn muốn.

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.