テスト実行モードでは、ログファイルに変更/更新された一般ファイルは含まれず、削除された内容もまったく含まれません。これには、変更され作成されたディレクトリのみが含まれます。ただし、テストを実行せずに実行すると、ログファイルにさまざまな変更が含まれます。
小さな例:コマンドを実行するとき
rsync -a --delete-delay --progress --itemize-changes --stats --dry-run --log-file="/tmp/rsync-dry.txt" /tmp/mySource/ /tmp/myDest/
ログファイルは次のとおりです(3つのエントリ、すべてディレクトリに関連付けられています)。
2015/08/26 17:18:04 [5812] building file list
2015/08/26 17:18:04 [5812] .d..t...... ./
2015/08/26 17:18:04 [5812] .d..t...... sub1/
2015/08/26 17:18:04 [5812] cd+++++++++ sub2/
2015/08/26 17:18:04 [5812] Number of files: 11 (reg: 8, dir: 3)
2015/08/26 17:18:04 [5812] Number of created files: 5 (reg: 4, dir: 1)
2015/08/26 17:18:04 [5812] Number of deleted files: 4 (reg: 3, dir: 1)
2015/08/26 17:18:04 [5812] Number of regular files transferred: 6
...
ドライランはありません。
rsync -a --delete-delay --progress --itemize-changes --stats --log-file="/tmp/rsync-wet.txt" /tmp/mySource/ /tmp/myDest/
ログファイルは次のとおりです(13項目)。
2015/08/26 17:19:44 [5837] building file list
2015/08/26 17:19:44 [5837] .d..t...... ./
2015/08/26 17:19:44 [5837] >f.st...... Bbb.txt
2015/08/26 17:19:44 [5837] >f+++++++++ Ccc.txt
2015/08/26 17:19:44 [5837] .d..t...... sub1/
2015/08/26 17:19:44 [5837] >f.st...... sub1/Fff.txt
2015/08/26 17:19:44 [5837] >f+++++++++ sub1/Ggg.txt
2015/08/26 17:19:44 [5837] cd+++++++++ sub2/
2015/08/26 17:19:44 [5837] >f+++++++++ sub2/Iii.txt
2015/08/26 17:19:44 [5837] >f+++++++++ sub2/Jjj.txt
2015/08/26 17:19:44 [5837] *deleting sub3/Kkk.txt
2015/08/26 17:19:44 [5837] *deleting sub3/
2015/08/26 17:19:44 [5837] *deleting Ddd.txt
2015/08/26 17:19:44 [5837] *deleting sub1/Hhh.txt
2015/08/26 17:19:44 [5837] Number of files: 11 (reg: 8, dir: 3)
2015/08/26 17:19:44 [5837] Number of created files: 5 (reg: 4, dir: 1)
2015/08/26 17:19:44 [5837] Number of deleted files: 4 (reg: 3, dir: 1)
2015/08/26 17:19:44 [5837] Number of regular files transferred: 6
...
これは、rsync が実行する操作を正確に反映します。
--dry-runの有無にかかわらず、rsyncの出力が同じでなければならないと信じているので混乱しています。 (そうでなければテストの実行に何が役に立ちますか?)問題はログファイルにのみ関連しています。 --dry-run の有無にかかわらず、端末出力は常に完了します。
-aの代わりに--rtgoplまたは-rtgo、-iの代わりに-vなどの他のオプションを試しました。旗を並べ替えてみました。 -cや--inplaceなどのオプションを追加してみました。役に立ちません。また、宛先が別のローカルパス(例のように)なのか、USBドライブなのか、SSH経由のリモート宛先なのかは重要ではありません。私は何が間違っていましたか?それとも、rsyncはこのように機能する必要がありますか? (私はUbuntu 14.04、rsyncバージョン3.1.0を使用しています。)
答え1
最後に、上記のrsyncアクションがバグではなく機能である可能性があるというヒントを見つけました。
現在のコードは、デーモンログを記録するのと同じ方法で --log-file を記録します。つまり、実際の転送ではない転送は記録しません。
[https://bugzilla.samba.org/show_bug.cgi?id=5792#c2]
テスト実行モードで実際に埋め込まれたログファイルをインポートするにはみんな更新、作成、削除。回避策として、画面出力をファイルにリダイレクトできます。
rsync -a --delete-delay --progress --itemize-changes --stats --out-format='%t %p %i %n %M %l' --dry-run /tmp/mySource/ /tmp/myDest/ | tee /tmp/rsync-dry.txt
この例では、このオプションを使用して、--out-format='%t %p %i %n %M %l'
このオプションが出力形式を指定する方法と、おおよその出力形式を指定します--log-file
。