rsync --dry-run出力を再利用して、後で実際の転送を高速化します


23

私は通常rsync -n実際に行う前にやるrsync。問題は、2回目の実行を自動化して、生成されたリストを正確に再利用するにはどうすればよい--dry-runでしょうか?

つまり、実行するrsync -nとどうrsyncなるかをシミュレーションできます。つまり、その出力を取得して処理し、その出力rsyncのみ--include-fromを何らかの方法で作成するのが私の考えです。したがって、完全なリストは一度だけ計算する必要があります。

これが意味をなさない場合は、教えてください。

ところで、私はを使用する傾向がありますrsync -hva --progress --stats --delete --exclude-from "$EXCLUDEFILE"。どのオプションを使用するかについても提案がある場合は、お知らせください。外部ハードドライブ(画像、ビデオ、ドキュメントのみを含む)のコンテンツを別の外部ハードドライブに複製しようとしています。


--dry-runコマンドからの出力をファイル(例:)にリダイレクトし、rsync --dry-run -avz SOURCE DEST > include.txtファイル/パスではないすべての行をinclude.txtから削除して、実行してみてくださいrsync --include-from include.txt
ThatGuy

その最後のコマンドはでなければなりませんrsync --include-from include.txt --exclude=* SOURCE DEST。詳細については、stackoverflow.com / a / 19296415/1765910を参照してください。
ThatGuy

はい、それはアイデアですが、実際にそれを行う方法はわかりません(さらに、彼が何をしているかを実際に知っている人からの承認が欲しいです)。私は使用rsync...しかし、シェルスクリプト/ bashのから何も知らない
マヌエル

回答:


18

ドライラン中に生成されたファイルリストをインクルードファイルとして使用することは確かに可能です。ただし、理想的には、ドライラン出力の上部と下部の余分な行を削除する必要があります。

出力例:

sending incremental file list
[LIST OF FILES]

sent 226 bytes  received 34 bytes  520.00 bytes/sec
total size is 648,373,274  speedup is 2,493,743.36 (DRY RUN)

パイプ、これらの行を削除するにはrsync、出力をにheadしてへtail。次に、処理された出力をインクルードファイルに保存します。

rsync --dry-run -avz source/ destination/ | head --lines=-3 | tail --lines=+3 > include.txt

最後に、rsync生成されたインクルードファイルを使用するように指示します(必要に応じて追加のオプションを追加します)。

rsync --include-from=include.txt --exclude=* source/ dest/


これに伴う問題は、削除すべきファイルに対応していないことです。そして、ファイルのリストのみを持つことを保証するのに十分なtail/ その方法はhead十分ですか?
マヌエル

追加する--deleteと、ソースディレクトリから削除されたファイルは、少なくとも試してみたコンピューターでは、宛先ディレクトリからも削除されます。tail/ head部分を完全に省くことができます。rsyncインクルードファイル内の各行をファイル名として解釈し、存在しないファイルを単に無視するため、余分な行を保持しても何も起こりません(「インクリメンタルファイルリスト」などの名前のファイルがない場合)これらのファイルもコピーされます)。
ThatGuy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.