Linux tương đương với robocopy?


34

Thật là buồn cười, có rất nhiều cách mà các công cụ dòng lệnh Linux vượt trội hơn rất nhiều so với các công cụ Windows, nhưng có một điều tôi chưa tìm thấy tương đương với bản sao chép . Robocopy linh hoạt hơn nhiều so với cpvà tôi không thể tìm ra cách thực hiện những gì tôi muốn với các công cụ Linux.

Một trường hợp sử dụng cụ thể là tôi có hai thư mục với hầu hết các tệp tương tự nhau, nhưng một có tệp nguồn mới hơn và một có tệp nội dung mà thư mục kia không có và có thể là tệp nguồn mới hơn (cho trang web). Tôi muốn sao chép các tệp từ thư mục sau vào thư mục cũ, thêm các tệp nội dung mới, nhưng không ghi đè lên các tệp mới hơn trong thư mục đích.

Tôi đã cố gắng tìm ra cách để làm điều này trong Linux trong khoảng nửa giờ, quyết định rằng tôi có thể phải học bash script hoặc một cái gì đó để làm những gì tôi muốn, và sau đó tôi nhận ra rằng tôi chỉ có thể sử dụng robocopy. Tôi cũng có một số yêu cầu khác. Về cơ bản, tôi đã chuyển đổi một trang web Python (Django) từ kho lưu trữ SVN sang kho lưu trữ Git và tôi muốn đảm bảo rằng tôi không có những thay đổi không được cam kết trong SVN. Tuy nhiên, tôi muốn loại trừ một cách có điều kiện các .svnthư mục và các .pyctệp Python đã biên dịch. Lệnh robocopy sau đây thực hiện chính xác những gì tôi muốn:

robocopy source destination /XO /E /XD .svn /XF *.pyc

Có tương đương với Robocopy trong Linux không? Tôi đã xem xét rsyncngắn gọn, nhưng có vẻ như tôi phải thiết lập máy chủ rsync trước khi thử đồng bộ hóa các thư mục.


1
Bạn không cần thiết lập máy chủ rsync, rsync trên ssh sẽ tự động chạy rsync trên máy từ xa ở chế độ máy chủ (theo cách chỉ được sử dụng cho kết nối đó, chạy trong tài khoản của bạn và tự động đóng khi hoàn thành) .
CesarB

Tuy nhiên, có vẻ như tôi phải thiết lập một máy chủ rsync trước khi thử đồng bộ hóa các thư mục. Tôi đã sử dụng Rsync trong nhiều năm và chưa bao giờ phải thiết lập một máy chủ Rsync chính thức. Trong thực tế, nhiều công cụ đồng bộ hóa / sao lưu trên macOS sử dụng Rsync làm lõi của chúng mà không cần thiết lập một máy chủ như Carbon Copy Cloner và, tôi tin rằng SuperDuper!
JakeGould

Câu trả lời:


38

Có vẻ như rsync chắc chắn là những gì bạn đang theo đuổi. Bạn không cần thiết lập 'máy chủ rsync' để sao chép các tệp từ máy này sang máy khác. Rsync hỗ trợ sao chép các tệp qua SFTP (Truyền tệp SSH) mà hầu hết các hộp linux đã kích hoạt (nếu không được tắt thủ công).

Xem các tập tin Mirror của Lifehack trên các hệ thống với rsync để biết thêm chi tiết:

Cho dù bạn muốn sao lưu dữ liệu của mình, phân phối tệp một cách an toàn hoặc phản chiếu các tài liệu làm việc của bạn qua internet từ văn phòng đến nhà, giữa các máy tính trên mạng cục bộ hoặc từ máy tính của bạn đến máy chủ web của bạn, rsync có thể hoàn thành công việc. Hôm nay chúng ta sẽ sử dụng rsync để nhân bản các thư mục giữa máy Mac và PC qua kết nối an toàn tại dòng lệnh.

Rsync là miễn phí (như trong lời nói) và đa nền tảng, có nghĩa là nó đồng bộ các tệp giữa các hệ điều hành (Windows / Cygwin, Mac OS, Linux); nó hoạt động trên ssh để nó được mã hóa và bảo mật; Không giống như FTP, nó tăng dần , do đó, chỉ các phần của các tệp đã thay đổi được chuyển, không phải toàn bộ tệp , làm cho nó đi như Speedy Gonzalez; và thực tế là dòng lệnh của nó làm cho nó có thể viết được và dễ dàng tự động hóa.


Đọc trang man rsync - để sử dụng ssh (với máy chủ rsync rõ ràng) bạn sẽ sử dụng "-e ssh"
Doug Harris

1
rsync là tuyệt vời! Và bạn không cần phải sử dụng -e vì bất kỳ đường dẫn nào như user@host.com: / blah / sẽ tự động sử dụng nó.
Hướng dẫn cách làm

Mmm, thật tuyệt. Vì vậy, nó có thể sử dụng scpcú pháp cơ bản giống như để chuyển qua ssh? Tôi đã thực sự cố gắng chuyển tập tin trên một máy, nhưng đó là điều tốt để biết.
Ibrahim

1
Thật không may, câu trả lời này không hoàn toàn chính xác: Mặc dù nó sử dụng SSH, nhưng nó không sử dụng SFTP. Thay vào đó, nó giao tiếp với đối tượng rsync từ xa trực tiếp bằng giao thức rsync.
Daniel B

15

rsync sẽ sao chép các tập tin từ một thư mục này sang một thư mục khác trên cùng một máy như robocopy. Đây là lệnh rsync tương đương với lệnh robocopy của bạn:

rsync -auv --exclude '.svn' --exclude '*.pyc' source destination

Điều này sẽ sao chép đệ quy nguồn tới đích và loại trừ các tệp cũ hơn cũng như các thư mục / tệp '.svn' và '* .pyc'.


Ngoại trừ nó sẽ làm như vậy theo một cách đơn luồng, điều này có thể dẫn đến một lần nhấn hiệu suất 5x tùy thuộc vào lượng không xác định trong giải pháp lưu trữ của bạn.
Mikhail

Khi một tệp bị xóa khỏi nguồn, nó không đồng bộ hóa với đích.
Jirong Hu
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.