1週間より新しいrsyncファイル


24

サーバーAでrsyncを実行して、サーバーBから7日より新しいすべてのファイルをコピーしたい。

find . -mtime -7

サーバーBのファイルを削除したくありません。


b)rsyncをどのくらいの頻度で実行しますか?

回答:


30

これにより、確実に進行するはずです。

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

これにより、デバイスノード、権限、タイムスタンプがコピーされます。-Hオプションは--files-fromで正確でないと確信しています。


23
リモートフィルターとして設定するには: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

cybertoastのコメントに修正を加えたい。たぶん彼と私のコンテキストは違うのですが、時間基準を与えられてリモートサーバーからファイルを簡単に抽出しようとしていました。したがって、サーバーAが私の宛先であり、サーバーBが私のソースである場合、rsync -avn --files-from = <(ssh user @ A 'find / path / on / A / -mtime -7 -type f -exec basename {} \; ')user @ B:/ / path / in / server / Aソースには先頭の/のみがあることに注意してください。--files-fromが相対パスを処理します。疑問がある場合は、man rsyncを使用して--files-fromセクションを参照してください。
einarc

@cybertoast basenameあなたの命令では何を意味しますか?説明してください。
ケマットロチ

@KematRochi-「ベース名、ディレクトリ名-パス名のファイル名またはディレクトリ部分を返す」。それが役に立てば幸いです。
サイバートースト

6

このスクリプトは、リモートサーバーからローカルに同期するためのcybertoastのコメントに基づいて作成しました。

ドライランで、./script.sh 3またはドライランでスクリプトを呼び出すことができます./script.sh 3 dry

#!/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:. .
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.