リモートサーバーからファイルをインポートするために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()
スキャンを無効にすることもできます。