24時間以内にディレクトリ内のすべてのファイルを見つけて、それを他のサーバーと同期したいと思います。
転送したくない古いファイルがありますが、古いファイルが最新のファイルであれば転送します。
findおよび-ctimeパラメータを使用して出力をファイルにリダイレクトするスクリプトを作成しようとしていますが、rsyncを効率的に使用する方法や一連のファイルを転送するより良い方法があるかどうかわかりません。数時間以内に変更された過去24ファイル。
このプロセスは非常に頻繁に実行する必要があるため、あまりにも非効率的なものを探したくありません。 (例:ftpを使用し、毎回すべてを送信します)。
どんなアイデアにも感謝します。
答え1
この試み:
cd /some/dir && rsync -av --files-from=<(find . -mtime 0 -printf "%p\n") <other stuff>
それを使うプロセスの交換 <( )
コマンドを名前付きfifoに置き換え、同期に含めるコンテンツとして読み取るfind
fifoの名前を指定します。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を削除してください。