scp を使って複数ファイルを一括でダウンロード(サーバーからローカルにコピー)する方法
#CLI

created: 2024/07/27, modified: 2024/07/27

標準のサムネイル 2024-06

想定シーンとしては、gitで抽出したファイル郡があり、それを今からサーバーにアップする。アップする前にサーバーにある該当ファイルをローカルにバックアップする。 scp を使ってリストにある複数ファイルを一括でサーバーからダウンロードする方法

scpの基本

SCP(Secure Copy Protocol)は、SSHを利用してリモートサーバーとローカルマシン間で安全にファイルを転送するコマンドです。コピー先に既存ファイルがあるときは強制的に上書きされます

  • username: リモートサーバーのユーザー名
  • remote_host: リモートサーバーのホスト名またはIPアドレス
  • /path/to/remote/file: リモートサーバーのコピー元ファイルのパス
  • /path/to/local/directory: ローカルのコピー先ディレクトリ

~/.ssh/config ファイルにホスト設定

~/.ssh/config ファイルにホスト設定を追加することで、簡潔にリモートサーバーへ接続できます。例:

  • Host:エイリアス名(例:myserver)。
  • HostName:リモートサーバーのホスト名またはIPアドレス。
  • User:リモートサーバーのユーザー名。
  • Port:SSH接続に使用するポート番号(デフォルトは22)。
  • IdentityFile:SSH接続に使用する秘密鍵のパス
  • オプション -p タイムスタンプを維持する

ファイル一覧をもとに一括でファイルダウンロードするzsh

設定ファイル(config.sh)を別にする

本体スクリプト

読み込むファイル一覧

ローカルにディレクトリがないとき新規作成

バックアップ目的なので基本的にフォルダがないことを想定しているので、なければ作る、処理をいれます

ファイルパスからディレクトリを抽出し、それがローカルになかったら作成する。
dirname は、指定されたファイルパスからディレクトリ部分を抽出するコマンド