scp/sftp コマンドの出力は、Linux サーバーの標準出力とファイルに進みます。

scp/sftp コマンドの出力は、Linux サーバーの標準出力とファイルに進みます。

リモートサーバーからファイルをインポートするためにscp / sftpを使用するリリーススクリプトを作成しています。また、このスクリプトの出力をrelease.logファイルに書き込もうとしています。私はこれを達成するために "tee"を使用しており、すべてにうまく機能します。 stdoutとエラーを意味しますが、ファイルのダウンロードの進行状況(コピーに時間がかかる)については、コンソールやファイルには表示されません。 。

ティーなしのscp出力

[email protected]:/apps/flowrisk/valservice/release/London/uat2/vs-server-2.1.16-21190-linux-amd64-frod-uat2-London-dist.zip /apps/flowrisk/uatldn/valservice
vs-server-2.1.16-21190-linux-amd64-frod-uat2-London-dist.zip                                                               100%   78MB  39.1MB/s   00:02

ティー付きscp出力

[email protected]:/apps/flowrisk/valservice/release/London/uat2/vs-server-2.1.16-21190-linux-amd64-frod-uat2-London-dist.zip /apps/flowrisk/uatldn/valservice

ユーザーが何が起こっているのかを知るために、teeを使用してコンソールからscp / sftpコマンドの進行状況を出力する方法を教えてください。

答え1

ログファイルに進行状況インジケータを含めることはあまり役に立たないようです。scp標準出力を端末に接続して実行してみてはいかがでしょうか?これは、転送中にスクリプトが中断されると、ログに進行状況を示す内容がないという欠点があります(ただし、部分転送のサイズを考慮すると非常にマイナーな欠点です)。

scp remotehost:/path/to/file /local/file >/dev/tty

進行状況の出力を保存するには、scp次を使用できます。script

script -q /dev/stdout -c 'scp remotehost:/path/to/file /local/file' | tee scp.log

または、以下を挿入できます。pvパイプラインから進行状況表示を取得します。合計バイト数ではなく、送信されたバイト数だけがわかるscpため、これはお勧めできません。pv

ssh remotehost 'cat /path/to/file' | pv -bpt >/local/file

答え2

そうだstdoutがttyでない場合、scpは進行状況インジケータを無効にします。。私がリンクした記事には、あなたに役立ついくつかの疑似ターミナルハッキング技術が含まれています。または、scpソースに移動してisatty()スキャンを無効にすることもできます。

関連情報