SSH でディレクトリをコピーする方法
scp は、再帰を指示しない限りフォルダをコピーしません。-r を付けます:
scp -r ./myfolder user@host:/remote/path/ これでディレクトリツリー全体がコピーされます。大きな転送や繰り返す転送には rsync のほうが優れています(再開でき、変更のないファイルはスキップします)。モバイルなら SFTP アプリがタップひとつで済ませてくれます。以下でそれぞれと、よくあるエラーを説明します。
scp -r —— 直接的な方法
# local folder → server
scp -r ./project user@host:/var/www/
# server folder → local
scp -r user@host:/var/log/nginx ./logs
# non-default port (note: capital -P)
scp -P 2222 -r ./project user@host:/var/www/ 多くの人がはまる落とし穴:scp はポート指定に大文字の -P を使います(小文字の -p はタイムスタンプを保持します)。これらを取り違えるのが、よくある「scp が動かない」原因です。
rsync —— 大きなコピーや繰り返すコピーに最適
大きいもの、同期するもの、複数回実行するものには rsync を使いましょう。変更があった分だけを転送し、中断されても再開します:
rsync -avz ./project/ user@host:/var/www/project/
# with a non-default port or a specific key:
rsync -avz -e "ssh -p 2222 -i ~/.ssh/mykey" ./project/ user@host:/var/www/project/ -a は権限を保持して再帰し、-v は詳細表示、-z は圧縮します。ソース末尾のスラッシュ(project/)に注意してください——これはその中身をコピーします。スラッシュがないとフォルダ自体をコピーします。(rsync で特定の鍵を使う方法は 特定の SSH 鍵を使う を参照。)
sftp —— 対話的に、そして get -r
閲覧しながら操作したいなら、sftp は get -r でディレクトリをダウンロードします:
sftp user@host
sftp> get -r /remote/folder 3 つのツールとそれぞれの使いどころについては SSH でファイルを転送する を参照してください。
よくあるエラー
- "not a regular file" / 何もコピーされない —— ディレクトリに
-rを付け忘れています。 - ポートが違う / connection refused —— scp ではポートに
-P(大文字)を使い、ポート番号を確認してください。 - Permission denied —— 宛先パスに書き込めないか、鍵認証に失敗しています(publickey ガイド)。
スマホからフォルダをコピーする
タッチキーボードで scp -r と 2 つのリモートパスを打ち込むのは、まさにモバイルを苦痛にするたぐいの作業です。SFTP 対応のクライアントなら、それを閲覧操作に変えてくれます:サーバーのファイルシステムを開き、フォルダを選んで、ダウンロードまたはアップロードする。TermAI の SFTP では、サーバー上のファイルを閲覧・転送し、直接編集することもできます。スクリプト化したコピーには、AI アシスタントがあなたが確認するための正しい scp -r や rsync コマンドを書いてくれます。
FAQ
ディレクトリを scp するには?-r を付けて再帰します:scp -r ./folder user@host:/path/。非デフォルトのポートには大文字の -P を使います。
なぜ scp がフォルダをコピーしないのか?-r がないと scp はディレクトリを拒否します("not a regular file")。-r を付けてください。ポートに大文字の -P を使ったかも確認しましょう。
ディレクトリには scp と rsync のどちら?
一回きりの小さなコピーには scp -r。大きいもの、繰り返すもの、中断されうるものには rsync —— 再開でき、変更のないファイルはスキップします。
sftp でディレクトリをダウンロードするには?sftp user@host で接続し、get -r /remote/folder を実行します。
クイックファクト
- フォルダを scp する:
scp -r ./folder user@host:/path/(-rは必須) - ポート:scp は大文字の
-Pを使う(小文字の-p= 時刻を保持) - 大きい/繰り返す:
rsync -avz src/ user@host:/dest/—— 再開し、変更のないものはスキップ - sftp:
get -r /remote/folder - モバイル:パスを打ち込む代わりに SFTP で閲覧して転送する