このページでは,Unix/Linuxでのコマンドによるファイル転送について整理しています.

目次

  1. sftpコマンド
  2. scpコマンド
  3. rsyncコマンド

sftpコマンド

sftpコマンドはSFTPによってファイルをサーバーへファイルをアップロードし,または,サーバーからダウンロードするコマンドです.

適当なユーザー名とサーバー名を用いて,

sftp USER_NAME@example.com

とします.
サーバー名の代わりにサーバーのIPアドレスを入力しても構いません.

サーバのパスワード入力を求められるので,パスワードが正しければログインすることができます.
適当な鍵を用いて,-i id_rsaのオプションにより公開鍵認証することも可能です.

ログイン後は,サーバーでの階層移動のためにcdが使えます.
また,ローカルでディレクトリを移るために,lcdコマンドを使うことができます.
同様に,サーバー上のファイルを参照するのにlsコマンドが利用できるので,ローカルのファイルを参照するにはlsコマンドに代えてllsコマンドを使用します.

ローカルからリモートへのファイルのアップロードは,

put /path/to/file

とします.
同様に,ダウンロードは

get /path/to/file

によって行います.

サーバーのファイルを削除するには,通常通りrmコマンドを使用します.

サーバーとのやりとりは,byeコマンドまたはexitコマンドで終了します.

scpコマンド

scpコマンドはSSH通信によってリモート・ローカル間でファイルをコピーするコマンドです.
ローカルのディレクトリをリモートのあるディレクトリより下の階層へファイルを再帰的にコピーする場合,適当なユーザー名とサーバー名を用いて,

scp -r /local/path/to/dir USER_NAME@example.com:/remote/path/to/dir/

と入力します.

単に1ファイルを転送するだけであれば,再帰を指示するオプションの-rは要りません.
-r /local/path/to/dirのところは/local/path/to/fileの形になります.

コマンド実行後はサーバのパスワード入力を求められます.
パスワードが正しければコピーが実行されます.
適当な鍵を用いて,-i id_rsaのオプションにより公開鍵認証することも可能です.

リモートからローカルにコピーする場合は,次のように引数を逆にします.

scp -r USER_NAME@example.com:/remote/path/to/dir /local/path/to/dir/

rsyncコマンド

rsyncコマンドは同期を実行するコマンドです.
ローカルのディレクトリとリモートのディレクトリそのものを再帰的に同期する場合,

rsync -r /local/path/to/dir USER_NAME@example.com:/remote/path/to/dir

とします.

/path/to/dirは「ディレクトリを」の意味ですが,/path/to/dir/であると「ディレクトリ内を」の意味となることに注意してください.

オプションが複数あります.
以下,よく使うものです.

  • 同期不要なファイルは--exclude="file"により指定します.例えば,.DS_Storeを同期させないようにしたいなら,--exclude=".DS_Store"です.
  • --deleteを入れておくと,ローカルに不在のファイルをリモートから削除します.
  • -aで,パーミッションやタイムスタンプ,シンボリックリンクも写します.
  • -uで,追加またはアップデートされたものを複製します.
  • -cで,チェックサムにて更新があったかどうかを確認します.

macOSなら,--iconv=UTF-8-MAC,UTF-8により,ファイル名についてUTF-8-MACからUTF-8への文字コード変換を行ってくれます.このオプションを使うにはHomebrewでbrew install rsyncとしておく必要がありました.