tập tin rsync mới hơn 1 tuần


24

Tôi muốn chạy rsync trên máy chủ A để sao chép tất cả các tệp từ Máy chủ B khi chúng mới hơn 7 ngày.

find . -mtime -7

Tôi không muốn xóa các tệp trên Máy chủ B.


b) bạn có thường xuyên chạy rsync không?

Câu trả lời:


30

Điều này sẽ giúp bạn tiến hành một cách vững chắc

rsync -RDa0P \
    --files-from=<(find sourcedir/./ -mtime -7 -print0) \
    . user@B:targetdir/

Điều này sao chép các nút thiết bị, quyền, dấu thời gian. Tôi khá chắc chắn rằng tùy chọn -H sẽ không chính xác với --files-from


23
Để đặt bộ lọc đó làm bộ lọc từ xa:rsync -avn --files-from=<(ssh user@A 'find /path/on/A/ -mtime -7 -type f -exec basename {} \;') user@A:/path/on/A/ user@B:targetdir
cybertoast

Tôi muốn thêm một chỉnh sửa cho nhận xét của cybertoast. Có lẽ bối cảnh trên anh ta khác với tôi nhưng tôi đã cố gắng giải nén các tập tin đơn giản từ một máy chủ từ xa theo tiêu chí thời gian. Vì vậy, máy chủ A là đích đến của tôi và máy chủ B là nguồn của tôi, sau đó: rsync -avn --files-from = <(ssh user @ A 'find / path / on / A / -mtime -7 -type f -exec {} \; ') người dùng @ B: / / path / in / server / A Thông báo chỉ có một nguồn hàng đầu / cho nguồn. Các --files-from chăm sóc đường dẫn tương đối cho bạn. Nếu bạn có nghi ngờ, hãy sử dụng man rsync và xem phần --files-from.
einarc

@cybertoast Có basenamenghĩa là gì trong lệnh của bạn? Bạn có thể giải thích được không?
Kemat Rochi

@KematRochi - "tên cơ sở, dirname - trả lại tên tệp hoặc phần thư mục của tên đường dẫn". Mong rằng sẽ giúp.
gian mạng

6

Tôi đã viết kịch bản này dựa trên nhận xét của cybertoast để đồng bộ hóa từ máy chủ từ xa sang cục bộ.

Bạn có thể gọi kịch bản với ./script.sh 3hoặc ./script.sh 3 drychạy khô.

#!/bin/bash
TIME=$1
DRYRUN=$2

if [[ -z $TIME ]]; then
  echo "Error: no time argument."
  echo "Please enter the number of days to sync."
  exit 1
fi

if [[ $DRYRUN = "dry" ]]; then
  DRYRUNCMD="--dry-run"
  echo "Dry run initiated..."
fi

rsync -avz $DRYRUNCMD --files-from=<(ssh \
    user@remote "find path/to/data/ \
    -mtime -$TIME ! -name *.mkv -type f \
    -exec ls $(basename {}) \;") \
  user@remote:. .
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.