SCPを介してリモートシステムからファイルの一部を転送する方法は?

SCPを介してリモートシステムからファイルの一部を転送する方法は?

繰り返し更新されるログファイルを取得しようとしています。ファイルを更新したいのですが、SCP経由でリモートシステムからファイル全体をダウンロードしたくありません。

最小限のネットワーク使用でこれを達成する方法についてのアイデアはありますか?

ベストアンサー1

SCPだけでは解決策はありません。このプロトコルは、部分的な転送ではなく、完全なファイルコピーのみを許可します。

SCP以上に集中したい場合は、いくつかのオプションがあります。

  1. 次のコマンドを使用して、ログファイルの新しい行のみを含むファイルを作成し、ファイルを転送します。

    ssh user@host tail -n +`wc -l /local/file.log` /remote/file.log >> /local/file.log
    

    その後、ローカルファイルの行数を計算し、SSH接続を介してその行番号の後のすべての行を印刷し、シェルリダイレクトを介してローカルファイルに追加するようにリモートシステムに指示します。この方法は、一部のシェルでは少しトリッキーで、少し高速になる可能性があります(ファイルのコピー中にファイルに到着する書き込みは最終的に部分的にのみ送信され、次の呼び出しでは完全に送信されない場合があります)。

  2. rsyncオプションと一緒に使用されます--checksum。これにより、データの増分転送が可能になり、使用されるローリングハッシュチェックサムのために絶対最小量のデータを転送する必要があります。最初の方法とは異なり、この方法はまったく高速ではありませんが、両端にrsyncが必要です。

  3. バイト範囲要求をサポートする(セキュア)Webサーバーを設定します。その後、HTTP HEAD要求を使用して新しいファイルサイズを取得し(オプションでファイルが変更されていない場合はIf-Modified-Sinceヘッダーを使用して無作為に変換します)、コピーの終わりに拡張範囲を要求できます。 HEAD要求されたレポートの全長。これにはほとんどの設定が含まれており、一部の回線を送信できますが、データ損失がないことを保証します。

  4. ログファイルを生成するアプリケーションのリモートロギングを設定し、ローカルシステムをログホストとして設定する方法を見つけます。もちろん、これはローカルシステムが常にオンになっている場合にのみ機能しますが、更新するために手動でタスクを実行することなく、最新バージョンのログを保持することを保証します。

おすすめ記事