Rsync(cygwin)を使用して、サーバーとPC間でファイルを転送します。
Rsyncは2分ごとに実行され、転送するファイルがある場合とない場合があります。いくつかのアクションを実行する必要がありますが、ファイルがサーバーからPCに転送された場合に限ります。
ファイルが転送されたかどうかはどうすればわかりますか?
P.S. rsyncの終了コードを使おうとしましたが、ファイルが転送されるときと転送されないときの両方で0が返されます。
rsync -rtv <source> <dest> | wc -l
結果が4を超える場合、何かが変更されました
オプションを使用します
rsync .... --log-file=/path/to/log/file
これはaddsをログファイルに追加するので、何かが転送されたかどうかを確認できます。転送された場合は、バックアップが実行されたときよりもはるかに遅くなります。
rsync --stats
オプション--stats
または--info=stats2
を使用して、最終的にgrepでフィルタリングできます。
rsync -avr ORIG DEST --stats | grep "Number of created files"
作成されたファイルの数:14
rsync
のマニュアルから読むことができます
-stats
これにより、rsyncはファイル転送時に詳細な統計セットを出力するようになり、rsyncのデルタ転送アルゴリズムがデータに対してどれほど効果的であるかを知ることができます。このオプションは、0または1の-vオプションと組み合わせた場合は--info = stats2、2つ以上の-vオプションと組み合わせた場合は--info = stats3と同等です。
追記:
どのファイルが転送されたかを確認するために好奇心がある場合に備えて、MariusMatutiaeによる 提案 としてログファイルを使用することをお勧めします。grep
フィルターでは、興味深いと思う各行を選択できます。
ファイルが転送された出力の例:
ファイル数:15(reg:14、dir:1)
作成されたファイルの数:14(reg:14)
削除されたファイルの数:0
転送された通常のファイルの数:14
合計ファイルサイズ:280,860バイト
転送されたファイルの合計サイズ:280,860バイト
リテラルデータ:280,860バイト
一致したデータ:0バイト
ファイルリストサイズ:0
ファイルリストの生成時間:0.001秒
ファイルリストの転送時間:0.000秒
送信された合計バイト数:281,842
受信した合計バイト数:285
ファイルが転送されていない同じコマンド:
ファイル数:15(reg:14、dir:1)
作成されたファイルの数:
削除されたファイルの数:
転送された通常のファイルの数:
合計ファイルサイズ:280,860バイト
転送されたファイルの合計サイズ:0バイト
リテラルデータ:0バイト
一致したデータ:0バイト
ファイルリストサイズ:0
ファイルリストの生成時間:0.001秒
ファイルリストの転送時間:0.000秒
送信された合計バイト数:357
受信した合計バイト数:12
もっと厳密な解決策が欲しかった。 Number of created files:
(メッセージは別の言語である可能性があります)をgrepしたり、-v
出力(rsync
がどの要約で出力するかを知っている)の2行を除くすべての行を削除したりしたくありません。次のバージョン?)。
rsync
のログの形式は設定できますが、標準出力の形式は設定できないことがわかりました( man rsyncd.conf
を参照)。
たとえば、「ファイルが変更されました!」を追加します。実際に変更されたファイルを含む各行に、次にgrep
:
rsync -a \
--log-file=/tmp/rsync.log \
--log-file-format="File changed! %f %i" \
source-dir target-dir
if fgrep "File changed!" /tmp/rsync.log > /dev/null; then
echo "rsync did something!"
fi
このアプローチの問題の1つは、--dry-run
では機能しないことです。この場合、--itemize-changes
を追加してstdoutを解析する必要があります。そして、そのフォーマットを設定することはできません。