2012-01-05 29 views
10

Tôi đã sử dụng tùy chọn --cvs-exclude trên tập lệnh rsync của mình trong hơn một năm nay. Tôi làm việc với một kho SVN để nó giữ các tập tin SVN ra khỏi sản xuất.Sử dụng --cvs-exclude trong rsync Đột nhiên bỏ qua thư mục lõi?

Hôm nay tôi đã cố gắng rsync thay đổi và đột nhiên rsync không chọn bất kỳ thứ gì từ thư mục có tên là "core". Khi điều tra, tôi phát hiện ra rằng "lõi" là một thư mục CVS ​​để nó bị bỏ qua.

Vì vậy, câu hỏi của tôi là lý do tại sao rsync làm việc ở tất cả cho tôi, nhưng đột nhiên hôm nay quyết định bắt đầu bỏ qua thư mục "cốt lõi" như nó phải được.

Tôi đã giải quyết vấn đề bằng cách đơn giản bỏ qua các tệp SVN thay vì sử dụng CVS loại trừ, nhưng vẫn còn lúng túng là tại sao rsync làm việc cho đến ngày hôm nay.

Mã của tôi cũ rsync:

rsync -vcaz --no-p --cvs-exclude --exclude downloader --exclude media --exclude var  /var/www/project/ [email protected]:/var/www/project/httpdocs/ | grep -v '/$' 

Hệ điều hành (Chạy Xubuntu):

Distributor ID: Ubuntu 
Description: Ubuntu 11.10 
Release: 11.10 
Codename: oneiric 

rsync phiên bản:

rsync version 3.0.8 protocol version 30 
Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others. 
Web site: http://rsync.samba.org/ 
Capabilities: 
64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints, 
socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace, 
append, ACLs, xattrs, iconv, symtimes 

Có lẽ không phải là một câu hỏi quan trọng, nhưng nó làm phiền tôi dù sao đi nữa.

Trả lời

16

Tôi cũng gặp phải vấn đề tương tự. Rsync không bao gồm các loại sau đây của các tập tin nếu tùy chọn C được sử dụng:

static char default_cvsignore[] = 
    /* These default ignored items come from the CVS manual. */ 
    "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" 
    /* The rest we added to suit ourself. */ 
    " .svn/ .git/ .hg/ .bzr/"; 

"cốt lõi" file là bãi lõi cho các chương trình chấm dứt, vì vậy thường bạn không muốn sao chép những tập tin này. Vấn đề là khi bạn có, ví dụ, một thư mục gọi là "lõi".

Giải pháp là sử dụng tùy chọn "--bao gồm", hoặc tạo một tập tin lọc chứa một quy tắc như:

+ core

và sau đó sử dụng "--filter = filename".

Các vấn đề liên quan