本記事では scp, sftp, lftp, rsync の比較と使い方を扱います
リモートサーバーとのファイルのやり取りは、SSH経由の転送が最も安全で汎用的。
ここではMacをローカル、Linuxをリモートと想定して、代表的な3つのコマンドラインツールを紹介する。
1. 準備:SSH接続確認
どの方法でも前提としてSSH接続が必要。
ssh user@remote.server.jp
初回は指紋確認などのユーザ認証が出る。接続が通ることを確認してから次の手順へ。
2. scp:最もシンプルなファイル転送コマンド
概要
scp は secure copy の略。
ローカル・リモート間でファイルやディレクトリを1行でコピーできる。
使い方
リモート → ローカル
scp user@remote.server.jp:/path/to/file.txt ./
ローカル → リモート
scp ./data.txt user@remote.server.jp:/path/to/
ディレクトリごと転送
scp -r ./local_dir user@remote.server.jp:/home/user/
特徴
✅ シンプル
✅ Bashのタブ補完が効く
⚠️ ファイル一覧や再開機能はなし
使う場面
単発の転送に最適。
3. sftp:安全なファイル操作・対話モード対応
概要
SFTP (Secure File Transfer Protocol) はSSHトンネル上で動くFTP風インターフェース。
起動
sftp user@remote.server.jp
Password: が出たらSSHと同じ認証でログイン。
よく使うコマンド
| コマンド | 内容 |
|---|---|
ls |
リモート側一覧表示 |
cd |
リモートディレクトリ移動 |
get file |
ダウンロード |
put file |
アップロード |
mget *.fastq.gz |
複数DL |
mput *.txt |
複数UL |
lcd |
ローカル側移動 |
exit または bye
|
終了 |
一行でファイル取得
sftp user@remote.server.jp:/remote/path/file.txt ./local_dir/
バッチ転送例
sftp user@remote.server.jp <<EOF
cd /remote/data
mget *.csv
bye
EOF
特徴
✅ SSHベースで安全
✅ 対話的操作・スクリプト両対応
⚠️ 標準ではタブ補完が効かない
4. lftp:最も高機能なCLIクライアント(ファイル名のタブ補完対応)
概要
lftp は ftp, sftp, http, fish など多様なプロトコルに対応した高機能ツール。
Macには標準で入っていないが、Homebrew経由で簡単に導入できる。
導入(Mac)
brew install lftp
接続
lftp -u user sftp://remote.server.jp
または
lftp sftp://user@remote.server.jp
ログイン後、通常のシェルのように操作可能。ファイル名のタブ補完が使える。
主なコマンド
| コマンド | 内容 |
|---|---|
ls |
ファイル一覧 |
cd / lcd
|
ディレクトリ移動 |
mirror |
ディレクトリ丸ごと転送 |
get / put
|
単一ファイル転送 |
pget |
中断→再開できるダウンロード |
jobs |
並行タスク表示 |
exit |
終了 |
例:リモートからディレクトリを丸ごと同期
mirror --parallel=4 /remote/path ./local_path
逆方向(ローカル→リモート)は mirror -R:
mirror -R ./local_path /remote/path
特徴
✅ ファイル名のタブ補完あり
✅ 並列転送・レジューム可
✅ 設定保存や自動再接続も可
⚠️ Homebrewで導入が必要
5. rsync:差分コピーと再開が可能な高機能転送
概要
rsync は SSH 経由でファイルを転送できる高機能コマンド。
scp のように単純コピーするだけでなく、差分転送や転送再開、同期ミラーリングなどに対応している。
使い方
リモート → ローカル
rsync -avz -e ssh user@remote.server.jp:/remote/path/ ./local_dir/
ローカル → リモート
rsync -avz -e ssh ./local_dir/ user@remote.server.jp:/remote/path/
主なオプション
| オプション | 意味 |
|---|---|
-a |
アーカイブモード(属性維持・再帰的コピー) |
-v |
詳細表示 |
-z |
転送時に圧縮 |
-e ssh |
SSH 経由で通信 |
--progress |
転送進捗を表示 |
--delete |
リモートに存在しないファイルを削除(同期時) |
特徴
✅ 差分転送(変更部分のみ再送)
✅ 転送再開(中断後の続きから)
✅ 同期・バックアップに最適
⚠️ 初回転送はやや遅め(差分データ構築のため)
6. 各ツールの比較まとめ
| ツール | 導入 | 補完 | 再開機能 | スクリプト化 | 適した用途 |
|---|---|---|---|---|---|
scp |
不要 | ✅ | ❌ | △ | 単発コピー |
sftp |
不要 | ❌ | △ | ✅ | 安全な転送・自動処理 |
lftp |
brew install lftp |
✅(ファイル名補完) | ✅ | ✅ | 大量データ・再送ありの転送 |
rsync |
不要 | ✅ | ✅ | ✅ | 差分同期・バックアップ |
7. まとめ
-
軽量・簡単にコピー →
scp -
対話・スクリプト両対応、安全性重視 →
sftp -
ファイル名補完・再開・ミラーリングが必要 →
lftp -
差分転送やバックアップが必要 →
rsync