ファイルが24年未満の2つのフォルダ間でファイルを繰り返し同期します。

ファイルが24年未満の2つのフォルダ間でファイルを繰り返し同期します。

24時間以内にディレクトリ内のすべてのファイルを見つけて、それを他のサーバーと同期したいと思います。

転送したくない古いファイルがありますが、古いファイルが最新のファイルであれば転送します。

findおよび-ctimeパラメータを使用して出力をファイルにリダイレクトするスクリプトを作成しようとしていますが、rsyncを効率的に使用する方法や一連のファイルを転送するより良い方法があるかどうかわかりません。数時間以内に変更された過去24ファイル。

このプロセスは非常に頻繁に実行する必要があるため、あまりにも非効率的なものを探したくありません。 (例:ftpを使用し、毎回すべてを送信します)。

どんなアイデアにも感謝します。

答え1

この試み:

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

それを使うプロセスの交換 <( )コマンドを名前付きfifoに置き換え、同期に含めるコンテンツとして読み取るfindfifoの名前を指定します。rsync

修正する

Kyleの答えによると、両方が機能しますが、明らかにより--files-from適切です。--include-from答えが更新されました。

答え2

#!/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

スクリプトは $LOCALDIR で find を実行し、結果をファイルにダンプし、rsync にファイルの内容をファイルのリストとして使用して $REMOTEHOST ホストの $REMOTEDIR ディレクトリに転送するように指示します。 rsync コマンドには絶対パスではなく相対パスが必要なので、スクリプト chdir を $LOCALDIR に追加します。 rsyncパラメーターに-v -nを残したので、スクリプトが必要な操作を実行するのに満足している場合は、-nを削除してください。

関連情報