SSH(wget)を使用してサーバーからサーバーへ直接ファイルを転送する方法

公開日:2016/09/25  最終更新日:2019/03/18  カテゴリー:SSH

WordPress等を移転する際に、移転元サーバーからローカルにファイルをダウンロードしてから、再度移転先サーバーにアップロードしていないでしょうか?
一度ローカルに保存するのは、非効率的で時間がかかるだけでなく ファイル消失の危険もあります。
そこで SSHを使用して ファイルを直接 サーバーからサーバーへ 移す方法を紹介させていただきます。

前提条件

  • 転送元:FTPが使用できる
  • 移転先:SSHが使用できる

実際のコマンド

ファイルを受け取る側のサーバーで以下を実行すれば、直接ファイルを取得できます。
FTPアカウントは取得される側のものです。
これで ローカルに一旦落とさなくていいので時間が大幅に削減できますね!

wget --restrict-file-names=nocontrol -c -N -r -l 0 --user=[FTPユーザー名] --password=[FTPパスワード] ftp://[FTPホスト名]/[取得ディレクトリパス]
$ などの特殊文字について
パスワードなどに $ などの特殊文字が含まれている場合は バックスラッシュ\で エスケープする必要があります。
追記:&を含むパスワードの場合について
パスワードの文字列部分をダブルクォーテーションで囲えばその必要はありません。

以前 紹介していたコマンド

こちらのユーザー名の指定の仕方では ユーザー名にドメインが使用されている場合などに 上手く認識されませんでした。
ユーザー名を URLエンコードすればいけるはずなんですけど いけなかったので お勧めしません。

wget -mc ftp://[FTPユーザー名]:[FTPパスワード]@[FTPホスト名]/[取得ディレクトリパス]
リスティングファイルを残したくない場合
wget -c -N -r -l 0 ftp://[FTPユーザー名]:[FTPパスワード]@[FTPホスト名]/[取得ディレクトリパス]

オプションについて

mオプション は ミラーリング用のオプションで、さかのぼる階層の数を無制限にしたり ローカルよりも新しいファイルのみを取得したり するオプションを一括指定しています。
cオプション は、転送が中断された際に 途中から再開することができます。

wgetオプション一覧

ディレクトリ名に 記号など を含む場合

@ などの記号を含む場合でエラーになる場合は URLエンコードすれば解消されます。
URLエンコードは こちらをご利用ください。

参考文献

本サイトでは URLに日本語を含んでいます。
メールなどで共有する場合は リンクとして認識されない場合がございますので、こちらをご利用ください。