Sử dụng rsync để tự động sao chép tệp vào thư mục khác


5

Tôi tìm thấy lệnh này để sao chép nội dung của nguồn vào một thư mục đích.

rsync -r source/* destination

Điều tôi thực sự muốn là để lệnh này tự động chạy mỗi khi tệp được thêm vào thư mục nguồn của tôi.

Điều này có thể không?


Bạn có thể sử dụng một tập lệnh kết hợp rsyncinotifychẳng hạn như tập lệnh này
Bert

Câu trả lời:


6

Bạn có thể sử dụng các hành động, Trình tự động và Thư mục để xem thư mục và chạy tập lệnh.

Khi khởi chạy Automator và chọn New, một trong các tùy chọn được đưa ra là thực hiện 'Hành động thư mục'. Ở đầu màn hình sau khi chọn Thư mục hành động, bạn được cung cấp tùy chọn chọn thư mục để 'xem'.

nhập mô tả hình ảnh ở đây

Điều tôi nghĩ bạn muốn làm trong trường hợp của mình là sau đó chọn 'Tiện ích' trên cột ngoài cùng bên trái, rồi kéo 'Chạy Shell Script' từ cột thứ hai vào cửa sổ dòng công việc.

nhập mô tả hình ảnh ở đây

Đây là nơi bạn sẽ viết bất kỳ tập lệnh nào bạn muốn chạy khi thay đổi được thực hiện cho thư mục. Trong trường hợp này tập lệnh rsync của bạn.

nhập mô tả hình ảnh ở đây


Đây là một câu trả lời tuyệt vời sẽ có lợi khi có một số nội dung đằng sau liên kết đó được viết ra trong bài viết.
Ian C.

Thêm chi tiết.
StephenCollins

3

Một giải pháp nhanh và bẩn cho câu hỏi này có thể di động trên các nền tảng UNIX (không dành riêng cho OSX, nhưng có thể được sử dụng trên HP-UX, Solaris, Linux, v.v.) là gọi rsync từ crontab của người dùng và để đồng bộ hóa thư mục của rsync logic tự xác định xem thư mục đã được thay đổi hay chưa. Một cách tinh chỉnh để sử dụng giải pháp di động này là kết thúc cuộc gọi đến rsync bằng kiểm tra ngày giữa một tệp được chạm (thực tế là thời gian sửa đổi của nó) và thời gian sửa đổi của thư mục sẽ được đồng bộ hóa, nhưng điều này là không cần thiết trừ khi các thư mục được đồng bộ hóa là rất lớn (sâu và / hoặc rộng). Một thư mục duy nhất với một vài thư mục con là lý tưởng cho giải pháp này.

Một mục cho crontab sẽ thực hiện trường hợp "nhanh và bẩn" trong một khoảng thời gian bỏ phiếu là:

# run sync every minute:
* * * * * /usr/bin/rsync -avz $HOME/source_path $HOME/target/path 1>> $HOME/.my_sync.log 2>&1

Điều đó sẽ làm điều đó cho trường hợp nhanh và bẩn - nói cách khác, các thư mục sẽ được cập nhật trong vòng một phút sau khi thực hiện thay đổi. Kiểm tra tệp ~ / .my_sync.log để biết trạng thái thực thi - tệp này sẽ phát triển không giới hạn theo thời gian, do đó, khi đã xác định đúng thao tác, hãy thay đổi ">>" thành ">" để ít nhất ghi nhật ký trạng thái rsync gần đây nhất.

Một con trỏ khác là chuyển đổi -z sang rsync nên được sử dụng khi đồng bộ hóa qua mạng. Công tắc -z sẽ khiến việc nén được sử dụng để truyền tệp mạng. Khi sử dụng rsync để đồng bộ hóa giữa các thư mục trên hệ thống tệp cục bộ với máy chủ, công tắc -z thường có thể bị bỏ qua.

Lưu ý về việc sử dụng crontab:

Nếu bạn không thể chỉnh sửa crontab của mình với:

$ crontab -e

Sau đó, bạn sẽ phải cho phép mình có một crontab. Xem trang người đàn ông cho crontab. Trong OSX, đây là những gì cần phải thực hiện - thay đổi hơi khác nhau trên các hệ thống linux: Tóm lại, hãy đảm bảo id người dùng của bạn nằm trong /usr/lib/cron/cron.allow hoặc / usr / lib / cron / cron.allow không tồn tại. Ngoài ra, hãy đảm bảo id người dùng của bạn không ở /usr/lib/cron/cron.deny.


1

Công cụ tôi sẽ sử dụng để theo dõi các thư mục của bạn là Hazel . Sẽ thật tuyệt vời khi khởi động kịch bản và cuối cùng bạn có thể sử dụng nó cho nhiều thư mục hơn khi bạn nghĩ về những thứ bạn có thể tự động hóa.

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.