rsync-アップロードされたファイルのみを報告する


14

rsyncに問題があります:rsyncしているディレクトリ内のすべてのファイルを表示するか(フラグを使用する場合-v)、何も表示しない(使用しない場合-v)。

実際に遠端にアップロードする必要があるファイルを除いて、rsyncをクワイエットにします。この種のレポートを有効にするフラグはありますか?私はドキュメントでこれを見つけることができません

回答:


11

はい、-iフラグをチェックしてください。すべての操作のレポートを暗号形式で提供します。形式の正確な定義については、manページを参照してください。

リモートホストに送信されるファイルのリストを取得するには、次を使用できます。

rsync <options> -i <src> <dst> | grep '^<' | awk '{ print $2 }'

1
これは、変更されたファイルではなく、すべてのファイルを再度報告しています。
ダンゴ

@gonvaledいいえ、リモートホストに送信されたファイルのみが出力されます(<fcstpoguax filenameさまざまなフラグが更新の必要性を示す理由として)。すべてのファイルを報告する場合、テストまたは環境に問題がある可能性があります。
オリバー

あなたは正しいと思います。私はマンページを見て、あなたが言うように説明されています。しかし、私のシステムはすべてのファイルを報告しています。遠端で...たぶん何か間違っ
dangonfast

んー。近づいて:レポート文字列は(すべてのファイルに対して)<f..T......です。マンページによると、これはタイムスタンプに関連しています。
ダンゴ

1
使用したgrep -E '^[^.]|^$'だけ...ドットで始まる本当に退屈な行を削除、また統計を聞かせ(または警告、エラー、...)ラインを通じて
フランクNocke

9

単一のrsyncは、-v実際には転送されたファイルのみを印刷します。毎回完全なリストを取得している場合は、おそらく、変更時間+サイズに基づくデフォルトのrsync src / dest比較アルゴリズムがあなたのケースに適していないことを意味します。-c--checksum)フラグを追加して、rsyncがチェックサムによってファイルを比較できるようにします。これは明らかにいくらかのI / Oオーバーヘッドを招くことに注意してください。

少し関連するのは、--info=flist代わりに使用する場合-v、ファイルのよりトリミングされた出力が得られるという事実です(基本的な-v出力のヘッダーとフッターを基本的にスキップします)。


1
--info=flistrsync> = 3.1でのみ利用可能で、どこでも利用できるわけではありません。たとえば、Rsync v3はGPL 3よりも
古い

1
Apple GPLのうわさは非常にうまいが、Enterprise Linuxには、サポート期間中に認証を保持し互換性(api + abi)を保証するためにバージョンがロック(および分岐)される大規模なサポート範囲(14年)があることも覚えておいてください。実際にはそれが唯一の実行可能な方法であり、副作用はバージョン番号が古いように見え、新しい機能が長い間思えるかもしれませんがエンタープライズにヒットしないことです。
user2066657

2

私の頭に浮かぶことの1つは、より詳細なログ形式を使用し、取得したい内容を確認することです。

例えば:

rsync -a --out-format="%b  %i %f" /etc/ /tmp/qq/ |awk '{if ($1>0) {print $3}}'

これはあまり堅牢ではなく、スペースを含むファイル名をうまく処理できません。


1

1. -iオプションを使用

これらのアイコン化された(または:不可解な)変更フラグ。出力は次のようになります。

*deleting   DSC00012 (copy).JPG
.d..tp..... ./
.f...p..... DSC00011.JPG
>f+++++++++ DSC00012 (copy2).JPG
>f.stp..... DSC00012.JPG
.f...p..... DSC00014.JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
... more statistic stuff
sent 636.01K bytes  received 4.63K bytes  1.28M bytes/sec
total size is 2.84M  speedup is 4.44

2.ドットで始まるすべての行をgrepします。

他のすべての行(読みやすくするために空白の行も)を通過させます。

rsync -arz -i --stats -h ... /mnt/FooDrive/ /mnt/backup  | grep -E '^[^.]|^$'

そして、ここにあります:-) —医師が注文したもの:

*deleting   DSC00012 (copy2).JPG
>f.stp..... DSC00011.JPG
>f+++++++++ DSC00012 (copy).JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
...

狩りをするので >はなく点を避けることは、統計だけでなく潜在的なエラー、警告なども通過させるという利点があります...

最後に統計情報を持つことは個人的な好みです。-h --statsこれらが気に入らない場合は使用しないでください。あなたの主な関心は、何百または何千もの未変更のファイルがスクロールするのを見ないことにあると思います


0

これを行うフラグはないと思いますが、今はあるかもしれません。ここに私がやった方法がありました:

rsync -vv [other options] | grep -v 'uptodate'

1
私のrsync(バージョン3.0.7)はuptodateレポートに追加されないため、フィルターで除外することはできません。
ダンゴ

マイクが上に投稿したものと@ jeckyll2hideが指摘したものを修正、または少なくとも明確にしたいと思います。問題は、rsync -vがもはや文字列「uptodate」を出力しないということではなく、rsync -vvを使用する必要があることだと思います。この2つと、rsyncバージョン3.1.0を使用するUbuntu 14.04で動作することを確認しました。マイク、これを反映するように投稿を更新できますか?
ジョンマークミッチェル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.