リモートサーバーにフォルダをまとめて転送する方法|初心者向けscpとrsync入門

バックアップ・復元

サーバーを運用したり開発環境を整えたりしていると、「フォルダごとまとめて転送したい」という場面は意外と多く訪れます。小さなファイルなら1つずつコピーでも済みますが、数百・数千単位のファイルを手作業で送るのは非現実的です。また、途中で接続が切れたり、転送に時間がかかり過ぎたりするなどのトラブルに悩まされることもあります。

そこで役立つのが scprsync という2つのコマンドです。どちらもLinuxやMac環境でよく使われ、リモートサーバーとの間でフォルダやファイルを効率的に転送できます。しかし「scpとrsyncは何が違うのか?」「自分のケースではどちらを使えばいいのか?」と迷う初心者も少なくありません。

この記事では、初心者の方にもわかりやすく scpとrsyncの基本的な使い方と違い を整理します。実際の利用シーンや便利な応用テクニックも紹介するので、日常的なサーバー作業やバックアップをスムーズに進めたい方はぜひ参考にしてください。

フォルダ転送の基本とよくある課題

ファイル単体ではなくフォルダごと送りたい場面

サーバー管理や開発の現場では、ファイルを1つだけ転送するケースよりも、フォルダをまとめてコピーする必要がある場面が多くあります。例えば以下のようなケースです。

  • Webアプリのソースコード一式をテストサーバーにアップロード
  • ログファイルを一定期間ごとにローカルに保存
  • 画像や動画など大量のデータをリモートサーバーに転送

こうした場面では、ファイルを1つ1つ手動でコピーするのは現実的ではありません。特に数百〜数千件のファイルが含まれるフォルダの場合、転送ミスや作業漏れが発生しやすくなります。

フォルダを丸ごと転送できる仕組みを知っておくことで、作業時間を大幅に短縮でき、再現性のある安定した運用が可能になります。

転送に失敗する典型例(遅い・中断・容量不足など)

フォルダ転送は便利ですが、初心者が直面しやすい課題もあります。

  • 速度が遅い
    ネットワーク経由の転送では、単純コピーだと時間がかかる場合があります。特に大容量のファイルや数が多い場合、非効率さを感じやすいです。
  • 接続が中断される
    長時間の転送中にネットワークが切断されると、最初からやり直しになるケースがあります。再転送に時間を要し、効率が悪くなります。
  • 容量不足のエラー
    転送先サーバーに空き容量が足りないと、途中で止まってしまいます。原因が分からないまま繰り返し失敗することもあります。
  • パーミッションの問題
    権限が正しく設定されていないと「Permission denied」と表示され、転送できません。

これらの課題を解決するために、Linuxで広く利用されているのが scprsync です。どちらもフォルダを効率的に転送できるコマンドですが、それぞれ特徴や得意分野が異なります。

scpコマンドでフォルダを転送する方法

scpの基本構文と仕組み

scp(secure copy)は、SSHを利用してファイルやフォルダを安全に転送するためのコマンドです。基本的な構文は以下の通りです。

scp [オプション] 転送元 転送先
  • 転送元転送先には、ローカルまたはリモートのパスを指定できます。
  • SSH経由で動作するため、セキュアな通信が保証されます。

例えば、ローカルのファイルをリモートサーバーにコピーする場合は次のように書きます。

scp file.txt user@remote:/home/user/

逆に、リモートからローカルにコピーする場合は以下の通りです。

scp user@remote:/home/user/file.txt ./  

-rオプションでフォルダを丸ごとコピーする例

ファイル単体のコピーに加え、フォルダごと転送したいときは -rオプション を指定します。

scp -r local_folder user@remote:/home/user/
  • -r は「再帰的にコピーする」という意味で、フォルダ内のファイルやサブフォルダをすべて転送します。
  • リモート→ローカルにフォルダを持ってくる場合も同じ構文が使えます。

例:リモートサーバーの/var/logsをローカルにコピー

scp -r user@remote:/var/logs ./backup_logs

実際の利用シーン(ローカル→サーバー、サーバー→サーバー)

  • ローカルからサーバーへアップロード
    Webアプリを開発しているとき、完成したコードをテスト環境や本番環境にまとめて転送するケースがあります。
  • サーバーからローカルにバックアップ
    サーバーの設定ファイルやログを手元に保存しておきたいときに便利です。
  • サーバー間での直接コピー
    scpは、ローカルを介さずに「サーバーAからサーバーBへ」直接コピーすることもできます。
scp -r user@serverA:/home/data user@serverB:/backup/

このようにシンプルな構文でフォルダを送れるため、scpは初心者でも取り組みやすい方法です。ただし、大量のデータを扱う場合には効率性の面で課題が出ることもあります。そこで次に紹介するのが rsync です。

rsyncコマンドでフォルダを転送する方法

rsyncの特徴(差分コピー・再開機能など)

rsync はファイルやフォルダを効率的に同期・転送できるコマンドで、scpよりも高度な機能を持っています。特に便利なのは以下の特徴です。

  • 差分コピー
    変更があった部分だけを転送するため、時間と通信量を大幅に削減できます。
  • 中断からの再開
    ネットワークが途切れても、再実行すれば中断した部分から続きがコピーされます。
  • 同期機能
    コピー先をコピー元と完全に一致させることができ、バックアップやサーバー間のファイル同期に最適です。

これらの機能により、大量データの定期的なバックアップや、本番環境へのデプロイ作業で広く使われています。

基本構文とよく使うオプション

rsync の基本構文は以下の通りです。

rsync [オプション] 転送元 転送先

例:ローカルのフォルダをリモートサーバーにコピーする場合

rsync -avz local_folder/ user@remote:/home/user/

よく使われるオプションは以下です。

  • -a : アーカイブモード(権限・シンボリックリンクなどを保持)
  • -v : 詳細表示(転送状況を表示)
  • -z : 転送時に圧縮し、通信量を削減
  • --delete : 転送元に存在しないファイルを転送先から削除(同期用)

rsyncが便利なケース(大量データ・バックアップなど)

  • 大量データを扱うとき
    写真や動画ファイルのようにサイズの大きなフォルダをコピーする場合、scpよりも短時間で完了します。
  • バックアップ用途
    差分コピーと削除オプションを組み合わせることで、コピー先を転送元と同じ状態に保つ「ミラーリング」が可能です。
  • 定期的な運用
    cronと組み合わせれば、自動で毎日バックアップを行うこともできます。
0 3 * * * rsync -avz /home/user/data/ user@remote:/backup/data/

このように、rsyncは「効率性」と「再現性」に優れたコマンドであり、サーバー運用を続けていく上で必ず身につけておきたいツールです。

scpとrsyncの違いを比較

処理速度と効率性の違い

scpはシンプルに「ファイルをそのままコピーする」仕組みなので、毎回全てのファイルを転送します。小規模のデータであれば問題ありませんが、ファイル数が膨大な場合や大容量データを繰り返しコピーする場合には非効率です。
一方でrsyncは「差分コピー」が可能で、変更があった部分だけを送るため、2回目以降の転送では大幅に時間を節約できます。特にバックアップや定期的な更新作業において、その差は顕著に現れます。

ネットワーク切断時の挙動

scpで転送中にネットワークが途切れると、転送が中断され、再度最初からコピーし直す必要があります。長時間かかるコピーの場合、このリスクは大きなストレスになります。
対してrsyncは中断から再開できるため、ネットワークが不安定な環境でも効率的です。再実行すれば未完了の部分のみを転送してくれるため、時間の無駄が最小限に抑えられます。

セキュリティ面・転送ログの違い

両方のコマンドはSSHを利用しており、暗号化通信でセキュアに転送できます。そのためセキュリティ面での基本的な安心感は共通です。
ただしrsyncは詳細な転送状況を確認しやすく、オプションによって「どのファイルが転送されたか」「どれだけの容量が削減できたか」といった情報を取得できます。scpは進捗を簡単に表示することもできますが、ログを細かく取りたい場合にはrsyncの方が便利です。

まとめると

  • scp → 単純で覚えやすい。少量のファイルや一度きりの転送に最適。
  • rsync → 差分コピーや再開機能で効率的。大規模データや定期的なバックアップに最適。

初心者におすすめの使い分け方

小規模転送ならscpで十分

数ファイルから数十ファイル程度の小規模な転送であれば、シンプルな構文のscpが便利です。覚えるべきオプションも少なく、-r を付ければフォルダごとまとめてコピーできるので、初心者でもすぐに実践できます。例えば「一度だけテスト用にコードを送る」「設定ファイルをバックアップしたい」といった用途であればscpで十分対応可能です。

バックアップや定期運用ならrsync

毎日のバックアップや、更新されたデータだけを効率よく転送したい場合はrsyncの出番です。特に差分コピーや再開機能は、ネットワーク環境が不安定な状況や、大容量データを扱う場面で強力な助けになります。さらに --delete オプションを使えば、コピー先を転送元と同じ状態に維持できるため、完全な同期を実現できます。

実際の選択基準をまとめる

どちらを使うべきか迷った場合、次の基準で考えるとわかりやすいです。

  • 転送回数
    • 一度だけのコピー → scp
    • 定期的に繰り返す → rsync
  • データ量
    • 小規模(数MB〜数百MB) → scp
    • 大規模(数GB以上、または数千ファイル) → rsync
  • 信頼性
    • ネットワークが安定している環境 → scpでも問題なし
    • 切断が発生しやすい環境 → rsyncが安心

このように整理しておくと、シーンに合わせて迷わず選べるようになります。

フォルダ転送の応用テクニック

ssh鍵認証と組み合わせてパスワード入力を省略

scpやrsyncを使う際、毎回パスワードを入力するのは面倒です。SSH鍵認証を設定しておけば、公開鍵をサーバーに登録するだけでパスワード入力なしで接続できるようになります。

例:鍵認証を利用したrsyncの実行

rsync -avz -e "ssh -i ~/.ssh/id_rsa" local_folder/ user@remote:/home/user/

これにより自動化が容易になり、cronとの組み合わせにも適しています。

cronと組み合わせて自動バックアップ

rsyncとcronを組み合わせれば、毎日決まった時間に自動でフォルダを同期できます。

例:毎日午前3時にバックアップを実行

0 3 * * * rsync -avz /home/user/data/ user@remote:/backup/data/

これにより、手動でコマンドを実行しなくても常に最新の状態が保存され、安心して運用できます。

圧縮転送で時間を短縮する方法

rsyncやscpには圧縮機能があり、転送時間を短縮できます。

  • scpの場合:
scp -C -r local_folder user@remote:/home/user/
  • rsyncの場合:
rsync -avz local_folder/ user@remote:/home/user/

-C-z オプションを指定することで、通信量を削減し、特に回線速度が遅い環境で効果を発揮します。

転送速度を確認する

rsyncでは進捗や速度を表示できるオプションもあります。

rsync -avz --progress local_folder/ user@remote:/home/user/

ファイルごとの進行状況や転送速度を確認できるので、大容量ファイルの送信中に「あとどのくらいで終わるか」を把握できます。

こうした応用テクニックを組み合わせることで、単なる「フォルダコピー」から一歩進んだ効率的な運用が可能になります。

よくあるエラーと解決方法

Permission deniedが出る場合

フォルダ転送で最も多いエラーの一つが「Permission denied」です。これは多くの場合、以下の原因で発生します。

  • 転送先のフォルダに書き込み権限がない
  • SSH鍵の設定やユーザー権限が不足している

解決策としては、対象フォルダのパーミッションを確認したり、正しいユーザーで接続しているかを見直すことが大切です。場合によっては管理者権限(sudo)が必要になることもあります。

転送が途中で止まる場合

scpではネットワークが切れると最初からやり直しになります。大容量データでこれは大きな負担です。その場合は rsyncを使う のが有効です。rsyncなら中断された場合でも再開できるため、無駄な時間を防げます。

もしscpを使い続けたい場合は、ファイルを事前にアーカイブ(tar.gzなど)にまとめて転送する方法もあります。

tar czf folder.tar.gz folder/
scp folder.tar.gz user@remote:/home/user/

このように1つのファイルにまとめれば、中断時の再送も簡単です。

大容量データを扱うときの注意点

数GBを超えるようなデータを転送するときには、以下のポイントに注意しましょう。

  • 転送先サーバーの空き容量を確認する
    途中で容量不足になると転送が失敗します。df -hコマンドで事前に確認することが大切です。
  • 圧縮して送る
    rsyncの-zオプションやscpの-Cオプションで圧縮転送すると、通信量を減らして時間を短縮できます。
  • 帯域制御を使う
    rsyncには--bwlimitオプションがあり、帯域を制御してサーバー負荷を抑えることが可能です。
rsync -avz --bwlimit=5000 local_folder/ user@remote:/backup/

上記では転送速度を「約5MB/秒」に制限しています。


これらのエラー対応や注意点を知っておくと、フォルダ転送の作業が格段にスムーズになり、トラブルによる時間のロスを防ぐことができます。

まとめ:効率的なフォルダ転送の第一歩

サーバー運用や開発作業において、フォルダをまとめて転送する場面は頻繁に訪れます。その際に頼れるのが scprsync です。

  • scp はシンプルで使いやすく、一度きりのコピーや小規模なデータ転送に向いています。
  • rsync は差分コピーや中断からの再開に対応しており、大規模データや定期的なバックアップで威力を発揮します。

また、ssh鍵認証でパスワード入力を省略したり、cronで自動化したり、圧縮オプションで転送時間を短縮したりと、応用テクニックを取り入れることで作業効率はさらに高まります。

初心者の方は、まずscpでフォルダ転送に慣れ、次にrsyncの便利さを体感するステップがおすすめです。そうすることで「とりあえずscp」「運用ではrsync」といった実践的な判断ができるようになり、サーバー管理や開発環境の運用がぐっと楽になるはずです。

効率的なフォルダ転送の方法を身につけておけば、時間や労力を節約できるだけでなく、日常のサーバー作業をより安心して進められるでしょう。

参考・参照リンク

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント