rsync không đồng bộ hóa tệp .htaccess


91

Tôi đang cố gắng rsync thư mục A của server1 với thư mục B của server2.

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ả cá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 đều được đồng bộ hóa.

Tôi cũng đã thử lệnh sau:

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

nhưng kết quả là như nhau.

Mọi ý kiến ​​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 với tư cách người dùng root.

cảm ơn


1
Tôi đã bạn hài lòng với một câu trả lời, bạn nên chấp nhận nó: meta.stackexchange.com/questions/5234/...
Kutzi

Câu trả lời:


109

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

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

rsync -av . server2::sharename/B

Cách này rsyncsẽ tìm kiếm các tệp để chuyển trong thư mục làm việc hiện tại thay vì tìm kiếm chúng trong thư mục *mở rộng tới.

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

shopt -s dotglob

Xem thêm manpage shopt .


7
Thật '.' giải quyết vấn đề, ví dụ như rsync -avz user@domain.com:/remote/path/. /destination/pathkhông được công việc
Mariusz Nowak

57

Đối với bất cứ ai chỉ cố gắng để thư mục đồng bộ hóa giữa các máy chủ (bao gồm tất cả các file ẩn) - ví dụ, đồng bộ somedirAvề source-serverđể somedirBtrên một máy chủ đích - thử điều này :

rsync -avz -e ssh --progress user@source-server:/somedirA/ somedirB/

Lưu ý các dấu gạch chéo ở cuối của cả hai đường dẫn. 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, dễ dàng nhất để thực hiện rsynccác lệnh từ máy chủ đích, vì dễ dàng hơn để đảm bảo rằng tôi có quyền truy cập ghi thích hợp (tức là, tôi có thể cần thêm sudovào lệnh trên).

Có thể không cần phải 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 somedirAtrên máy chủ nguồn của bạn. :)


Có phải cờ -e sẽ đồng bộ hóa .htaccesstệp không?
Jesse Burcsik

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

1
Bạn chỉ cần cắt giảm trên nguồn, đích không quan trọng
Jonas Stensved

28

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

Đối với tôi khi tôi thực hiện lệnh sau, các tệp ẩn không được rsync'ed

rsync -av /home/user1 server02:/home/user1

Nhưng khi tôi thêm dấu gạch chéo vào cuối đường dẫn, các tệp ẩn đã được rsync'ed.

rsync -av /home/user1/ server02:/home/user1/

Lưu ý các dấu gạch chéo ở cuối đường dẫn , như Brian Lacy đã nói rằng các 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 đăng của anh ấy hoặc tôi đã làm điều đó.


1
Chỉ cần thêm shopt -s dotglobvào tập lệnh của bạn trước rsync
Pian0_M4n

3

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

Hãy xem xét nội dung thư mục mẫu sau

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

Việc mở rộng ký tự đại diện của trình bao dịch danh sách đối số mà chương trình rsync lấy từ

-av * server2::sharename/B

thành

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

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


3

Lệnh *cho rsynch để không đồng bộ các tệp ẩn. Bạn không nên bỏ qua 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.