3

進行中の rsync コマンドからのログ ファイルがあります。この進行状況を実行すると、同じ行の表示情報が更新されます。このコマンドからの出力をキャプチャするとcat、端末で正常に表示されるファイルが得られます (すべてのバックスペースと再編集が再生されます) がgrep 、ファイルで使用して処理できるようにしたいので、すべてのバックスペースが表示されますコマンドを編集します。ファイルを処理して進行状況の更新をすべて削除し、最終的な編集を含むファイルを取得するにはどうすればよいですか?

4

2 に答える 2

6

プログレス ラインが以前のものを上書きすることなく、キャプチャしたファイルがどのように見えるかを確認したい場合:

sed 's/\r/\n/g' capture-file

次のような結果が得られる可能性があります。

created directory /some/dest/dir
filename

       32768   0%    0.00kB/s    0:00:00
     6717440  21%    6.38MB/s    0:00:03
    13139968  41%    6.25MB/s    0:00:02
    19791872  62%    6.28MB/s    0:00:01
    26214400  82%    6.24MB/s    0:00:00
    31784420 100%    6.25MB/s    0:00:04 (xfer#1, to-check=0/1)

sent 31788388 bytes  received 31 bytes  3346149.37 bytes/sec
total size is 31784420  speedup is 1.00

進行状況メッセージの最後のステップだけを表示し、前のステップを削除したい場合:

sed 's/.*\r/\n/g' capture-file

これは次のようになります。

created directory /some/dest/dir
filename

    31784420 100%    6.25MB/s    0:00:04 (xfer#1, to-check=0/1)

sent 31788388 bytes  received 31 bytes  3346149.37 bytes/sec
total size is 31784420  speedup is 1.00

ログ情報をファイルに取り込むオプションを指定しrsyncて実行できます。--log-file=name「名前」は好きな名前に置き換えてください。オプションを使用してログに記録される情報を制御できlog-file-formatます (詳細については、ログ形式のセクションman rsyncd.confを参照してください)。

私のシステムでは、デフォルトのrsyncログ ファイルは次のようになります。

2009/11/01 17:19:20 [23802] building file list
2009/11/01 17:19:20 [23802] created directory /some/dest/dir
2009/11/01 17:19:25 [23802] <f+++++++++ filename
2009/11/01 17:19:25 [23802] sent 31788388 bytes  received 31 bytes  3346149.37 bytes/sec
2009/11/01 17:19:25 [23802] total size is 31784420  speedup is 1.00
于 2009-11-01T23:30:49.053 に答える
0

まず、さまざまな理由から進行状況インジケーターを維持することが重要であると推測しています。最も簡単な解決策は、それらをオフにすることです。第二に、画面に表示されるものとは別のファイルに進行状況インジケーター以外のすべてをログに書き出すように rsync に指示する方法はないと仮定しています。最後に、後で他のツールを使用して処理するログ ファイルに、進行状況インジケーターのようなものはまったく必要ないと仮定しています。

これらの 2 つの前提があれば、基本的に各行で \b または \r 文字を探し、それらの文字を含むすべての行を破棄することで、進行状況インジケーターを取り除くことができます。これは、次のような grep コマンド ラインと同じくらい簡単です。

grep -ve "$(echo -ne '[\b\r]')" logfile

"$(...)"これは、スタイル引数置換をサポートするシェルと、引数をサポートする echo コマンドがあることを前提としてい-eます。

于 2009-11-01T22:40:51.870 に答える