2012-01-28 28 views
52

Tôi đang cố gắng rsync thư mục A của server1 với thư mục B của server2.rsync không đồng bộ hóa .htaccess tập tin

Ngồi trong thư mục A của server1, tôi chạy các lệnh sau.

rsync -av * server2::sharename/B 

nhưng điều thú vị là nó đồng bộ hóa tất cả tệp và thư mục ngoại trừ .htaccess hoặc bất kỳ tệp ẩn nào trong thư mục A. Mọi tệp ẩn trong thư mục con được đồng bộ hóa.

Tôi cũng đã cố gắng vào lệnh sau:

rsync -av --include=".htaccess" * server2::sharename/B 

nhưng kết quả đều giống nhau.

Bất kỳ ý tưởng nào tại sao các tệp ẩn của thư mục A không được đồng bộ hóa và cách khắc phục. Tôi đang chạy như người dùng root.

nhờ

+1

Tôi hài lòng với một câu trả lời, bạn nên chấp nhận câu trả lời: http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Kutzi

Trả lời

71

Điều này là do thực tế là * là theo mặc định mở rộng đến tất cả các file trong thư mục làm việc hiện tại ngoại trừ các tập tin có tên bắt đầu với một dấu chấm. Do đó, rsync không bao giờ nhận các tệp này dưới dạng đối số.

Bạn có thể vượt qua . biểu thị thư mục làm việc hiện tại để rsync:

rsync -av . server2::sharename/B 

này cách rsync sẽ tìm kiếm các file để chuyển vào thư mục làm việc hiện tại chứ không phải tìm kiếm chúng trong những gì * mở rộng để.

Ngoài ra, bạn có thể sử dụng lệnh sau đây để làm * mở rộng cho tất cả các file bao gồm những người mà bắt đầu với một dấu chấm:

shopt -s dotglob 

Xem thêm shopt manpage.

+4

Thực tế '.' giải quyết vấn đề, ví dụ: 'rsync -avz [email protected]:/remote/path /./destination/path' thực hiện công việc –

2

* yêu cầu rsynch không đồng bộ hóa các tệp ẩn. Bạn đã cố gắng bỏ qua nó chưa?

3

Tôi nghĩ rằng vấn đề là do mở rộng ký tự đại diện shell. Sử dụng . thay vì sao.

Hãy xem xét ví dụ sau nội dung thư mục

$ ls -a . 
. .. .htaccess a.html z.js 

mở rộng ký tự đại diện của vỏ dịch danh sách lập luận rằng chương trình rsync được từ

-av * server2::sharename/B 

vào

-av a.html z.js server2::sharename/B 

trước khi lệnh bắt đầu được thực hiện.

31

Đối với bất kỳ ai chỉ cố gắng đồng bộ hóa các thư mục giữa các máy chủ (bao gồm tất cả các tệp bị ẩn) - ví dụ:, Đồng bộ somedirA trên source-server-somedirB trên một máy chủ đích - thử này:

rsync -avz -e ssh --progress [email protected]:/somedirA/ somedirB/ 

Lưu ý các dấu gạch chéo ở phần cuối của cả hai con đường. Bất kỳ cú pháp nào khác có thể dẫn đến kết quả không mong muốn!


Ngoài ra, đối với tôi đơn giản nhất của nó để thực hiện rsync lệnh từ máy chủ đích, bởi vì nó dễ dàng hơn để chắc chắn rằng tôi đã có thích hợp truy cập ghi (ví dụ, tôi có thể cần thêm sudo để lệnh trên).

Có thể không cần nói, nhưng rõ ràng người dùng từ xa của bạn cũng cần quyền truy cập đọc vào somedirA trên máy chủ nguồn của bạn. :)

+0

Có phải cờ -e sẽ đồng bộ hóa tệp '.htaccess' không? –

+0

@JesseBurcsik Không, '-e ssh' chỉ định phương thức kết nối. – tripleee

+0

Bạn chỉ cần cắt giảm trên nguồn, điểm đến không quan trọng –

9

Tôi gặp vấn đề tương tự.

Đối với tôi khi tôi đã làm lệnh sau các tập tin ẩn đã không được rsync'ed

rsync -av /home/user1 wobgalaxy02:/home/user1 

Nhưng khi tôi thêm dấu gạch chéo ở cuối con đường, các tập tin ẩn được rsync'ed .

rsync -av /home/user1/ wobgalaxy02:/home/user1/ 

Lưu ý các dấu gạch chéo ở cuối con đường, như Brian Lacy cho biết dấu gạch chéo là chìa khóa. Tôi không có danh tiếng để bình luận về bài viết của anh ấy hoặc tôi đã làm điều đó.

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