Làm thế nào để RSYNC một tệp duy nhất?


95

Hiện tại tôi chỉ RSync-ing Directoriesnhư sau:

* * * * * rsync -avz /var/www/public_html/images root@<remote-ip>:/var/www/public_html

Vì vậy, làm thế nào để tôi có rsyncmột tệp duy nhất như thế /var/www/public_html/.htaccessnào?

Câu trả lời:


160

Bạn làm điều đó giống như cách bạn làm với một thư mục, nhưng bạn chỉ định đường dẫn đầy đủ đến tên tệp làm nguồn. Trong ví dụ của bạn:

rsync -avz   --progress  /var/www/public_html/.htaccess root@<remote-ip>:/var/www/public_html/

Như đã đề cập trong phần nhận xét: vì -abao gồm đệ quy , một chút lỗi đánh máy có thể khiến nó bắt đầu quá trình chuyển cây thư mục đầy đủ, vì vậy, một cách tiếp cận chống đánh lừa hơn có thể chỉ sử dụng -vzhoặc thay thế nó bằng -lptgoD.


19
Ngoài ra, nếu bạn chỉ gửi một tệp, bạn có thể muốn thêm thông số "--progress" để bạn có thể theo dõi tiến trình của nó.
JoshStrange

điều này có nghĩa là bạn vẫn cần một mô-đun trong rsyncd.conf với thư mục phía trên tệp (ví dụ: với tùy chọn từ chối xóa), hoặc bạn có thể tải tệp lên bất kỳ đâu trên máy chủ bằng cách chỉ định đường dẫn của nó? Trang người đàn ông không thực sự rõ ràng về điều đó.

3
-a bao gồm đệ quy và điều đó không cần thiết cho một tệp đơn lẻ, không chắc liệu tôi có sử dụng cờ đó cho một tệp không vì nó có thể dẫn đến hành vi không mong muốn nếu tên tệp vô tình trở thành một thư mục.
redanimalwar

2
--partial --stats --progress << Các cờ này hữu ích nếu đó là một tệp thực sự lớn và có thể phải tiếp tục lại sau khi chuyển bị hỏng.
Ahi Tuna

16

Cú pháp cơ bản

rsync options source destination

Thí dụ

rsync -az /var/www/public_html/filename root@<remote-ip>:/var/www/public_html

Đọc thêm


14

Câu trả lời của Michael Place hoạt động tốt nếu, liên quan đến thư mục gốc cho cả nguồn và đích, tất cả các thư mục trong đường dẫn của tệp đã tồn tại.

Nhưng điều gì sẽ xảy ra nếu bạn muốn đồng bộ hóa một tệp với đường dẫn nguồn này:

/ source-root / a / b / file

đến một tệp có đường dẫn đích sau:

/ target-root / a / b / file

và các thư mục ab không tồn tại?

Bạn cần chạy một lệnh rsync như sau:

rsync -r --include="/a/" --include="/a/b/" --include="/a/b/file" --exclude="*" [source] [target]

2
Sẽ không an toàn hơn nếu chỉ sao chép từng tệp vào một thư mục hiện có hoặc tạo các thư mục trước? Trong trường hợp đồng bộ hóa nội dung thư mục hoặc thư mục, hãy rsync tạo tất cả các thư mục con, dù sao thì đó cũng là công việc của nó, nhưng trong trường hợp cụ thể này thì quá phức tạp và phức tạp khi - bao gồm các tham số chỉ để sao chép các tệp riêng lẻ.
Tulains Córdova

@ user1598390 Tôi không chắc bạn đang giả định hoặc đang tưởng tượng về tình huống nào, nơi điều này sẽ kém an toàn hơn, nhưng nếu bạn đang cố nhớ dạng cụ thể của lệnh này và bạn không thực hiện nó thường xuyên, thì có lẽ là vậy. kém an toàn hơn thì sao chép một tệp. Có thể an toàn hơn nếu tệp lớn, tức là vì rsync tự động xử lý hầu hết các lỗi có thể xảy ra trong quá trình sao chép. Đối với một số ngữ cảnh, cú pháp của tôi đặc biệt hữu ích đối với tôi bởi vì tôi đã viết mã tạo ra các lệnh ở dạng này, do đã được kiểm tra đầy đủ về mã liên quan, các lệnh này là 'an toàn'.
Kenny Evitt

0

Cho đến nay, hai trong số các câu trả lời không hoàn toàn đúng, họ sẽ nhận được nhiều hơn một tệp và tệp còn lại không đơn giản như nó có thể, đây là một IMO câu trả lời đơn giản hơn.

Phần sau có chính xác một tệp, nhưng bạn phải tạo thư mục đích bằng mkdir. Đây có lẽ là lựa chọn nhanh nhất:

mkdir -p ./local/path/to/file
rsync user@remote:/remote/path/to/file/ -zarv --include "filename" --exclude "*" ./local/path/to/file/

Nếu chỉ có một phiên bản của tệp trong / remote / path, rsync có thể tạo các thư mục cho bạn nếu bạn làm như sau. Điều này có thể sẽ mất nhiều thời gian hơn vì nó tìm kiếm nhiều thư mục hơn. Thêm vào đó, nó sẽ tạo các thư mục trống cho các thư mục trong / remote / path không có trong ./local

cd ./local
rsync user@remote:/remote/path -zarv --include "*/" --include "filename" --exclude "*" .

Hãy nhớ rằng thứ tự - bao gồm và - bao gồm quan trọng.

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.