đồng bộ hóa các tệp đệ quy giữa hai thư mục trong đó các tệp dưới 24 giờ


7

Tôi muốn tìm tất cả các tệp trong một thư mục trong vòng 24 giờ sau đó rsync các tệp đó với một máy chủ khác.

Có một số tệp cũ mà tôi không muốn chuyển, tuy nhiên nếu những tệp cũ đó được cập nhật thì tôi sẽ làm.

Tôi đã nghĩ đến việc viết một tập lệnh với: find và tham số -ctime và chuyển hướng đầu ra đó thành một tập tin, nhưng tôi không biết làm thế nào để rsync sử dụng hiệu quả điều đó, hoặc nếu có cách nào tốt hơn để chuyển một tập hợp các tập tin đã thay đổi trong 24 giờ qua.

Quá trình này cần phải được chạy rất thường xuyên, vì vậy tôi không tìm kiếm thứ gì đó quá kém hiệu quả. (chẳng hạn như sử dụng ftp và gửi mọi thứ mỗi lần).

Bất kỳ ý tưởng đánh giá cao.


Tôi đã cập nhật câu trả lời của tôi một lần nữa. Có vẻ như --include-fromlà không đủ, vì hành vi mặc định là bao gồm mọi thứ. Bạn cần nói rõ ràng với --excludemọi thứ để nó hoạt động như một danh sách trắng.
Cuộc bao vây

Câu trả lời:


7

Thử cái này:

cd /some/dir && rsync -av --files-from=<(find . -mtime 0 -printf "%p\n") <other stuff>

Nó sử dụng Thay thế quy trình <( ) để thay thế findlệnh bằng tên fifo và đặt tên của năm đó rsyncđể đọc như những gì cần bao gồm trong đồng bộ hóa.

Cập nhật

Theo câu trả lời của Kyle, nó chắc chắn có vẻ --files-fromphù hợp hơn --include-from; mặc dù cả hai sẽ làm việc Trả lời cập nhật


1
rsynclà một cách, hệ thống đồng bộ một chiều. Sử dụng unisonnếu hệ thống đồng bộ hai chiều, hai chiều là cần thiết.
Nikhil Mulley

3
#!/bin/sh
thefiles=/tmp/files.$$
LOCALDIR=/path/to/local/dir
REMOTEDIR=/path/to/remote/dir
REMOTEHOST=remote.host
changetime=24h

cd $LOCALDIR || { echo cd failed 1>&2; exit 1; }

trap 'rm -f $thefiles' 0

find . -type f -ctime -$changetime -print > $thefiles
rsync -v -n --archive --files-from=$thefiles . $REMOTEHOST:$REMOTEDIR

Tập lệnh này chạy find trong $ LOCALDIR, kết quả kết quả vào một tệp, sau đó báo cho rsync sử dụng nội dung tệp dưới dạng danh sách các tệp để chuyển vào thư mục $ REMOTEDIR trên máy chủ $ REMOTEHOST. Tập lệnh chdir thành $ LOCALDIR vì lệnh rsync cần các đường dẫn tương đối, không phải đường dẫn tuyệt đối. Tôi đã để lại -v -n trong rsync args để bạn có thể thấy những gì nó làm mà không cần sao chép bất cứ điều gì; xóa -n khi bạn hài lòng kịch bản làm những gì bạn muố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.