SFTPを使ってファイルのダウンロード/アップロードする

# はじめに

サーバーからファイルをダウンロードしたい。
macのファイルをサーバーへアップロードしたい。
そんな時は SFTP コマンドを使うと便利です。

SCP というファイルをやり取りするコマンドがありますが
昨今このコマンドは非推奨となっています。

SCP の代わりに使えるコマンドは SFTP や RSYNC です。
この記事では SFTP についてお伝えします。

# 概要

SFTPを使ってサーバーとファイルのアップロードやダウンロードを行う。

# 対象者

- macでターミナルを使っている
- ターミナルでファイルの操作が行える
- テキストエディタを使える
- シェルはzsh（最近のmacはデフォルトでzsh：2022年時点）

# 関連記事

- [SFTPコマンドをシェルファイルから使うサンプル](https://qiita.com/tatsumi_t2/items/719206cb6ce33fcb414f)	
- [SSH接続をconfigファイルを使ってラクする](https://qiita.com/tatsumi_t2/items/3d88afdaf8d5f7283267)

# 目次

- [サーバー接続](#サーバー接続)
- [接続の終了](#接続の終了)
- [現在のディレクトリ名を確認する](#現在のディレクトリ名を確認する)
- [現在のディレクトリの中身を確認する](#現在のディレクトリの中身を確認する)
- [ディレクトリを移動する](#ディレクトリを移動する)
- [ローカル側のコマンド](#ローカル側のコマンド)
- [サーバーからファイルをダウンロードする](#サーバーからファイルをダウンロードする)
- [macのファイルをサーバーへアップロードする](#macのファイルをサーバーへアップロードする)
- [その他のコマンド](#その他のコマンド)
- [最後に](#最後に)

# サーバー接続

```bash
sftp -i 鍵ファイルへのパス ユーザー@ホスト
```

サンプル

```bash
sftp -i ~/keys/hoge-key.pem hoge-user@hoge-server
```

ssh/configを設定していれば、以下のような感じで簡単に接続できます。

```bash
sftp hoge
```

設定の仕方はこちらの記事を参考にしてください。
[「SSH接続をconfigファイルを使ってラクする」](https://qiita.com/tatsumi_t2/items/3d88afdaf8d5f7283267)



接続するとこんな感じになります。

```bash
$ sftp -i ~/keys/hoge-key.pem hoge-user@hoge-server

Connected to XXXXXXXX
sftp> 
```

# 接続の終了

```bash
sftp> quit
```

# 現在のディレクトリ名を確認する

サーバー側の現在のディレクトリ名を確認する

```bash
sftp> pwd
```

ローカル側の現在のディレクトリ名を確認する

```bash
sftp> lpwd
```

# 現在のディレクトリの中身を確認する

サーバー側の現在のディレクトリの中身を確認する

```bash
sftp> ls
```

ローカル側の現在のディレクトリの中身を確認する

```bash
sftp> lls
```

# ディレクトリを移動する

サーバー側でディレクトリを移動する

```bash
sftp> cd ディレクトリ名
```

ローカル側でディレクトリを移動する

```bash
sftp> lcd ディレクトリ名
```

# ローカル側のコマンド

接頭辞に小文字のエル ”l” をつける。”local” の ”l”

```bash
sftp> lpwd
sftp> lls
sftp> lcd ディレクトリ名
```

# サーバーからファイルをダウンロードする

すでにファイルが存在する場合は上書きされるので注意

ファイル指定

```bash
sftp> get ファイル名
```

ワイルドカードも使えます

例：拡張子がpngのファイルをカレントディレクトリからダウンロード

```bash
sftp> get *.png
```

ディレクトリ指定：サブディクレトリもダウンロード

```bash
sftp> get -r ディレクトリ名
```

# macのファイルをサーバーへアップロードする

すでにファイルが存在する場合は上書きされるので注意

ファイル指定

サーバー側ローカル側共にカレントディクレトリ。pwd、lpwdで確認できる。

```bash
sftp> put ファイル名
```

ワイルドカードも使えます

例：拡張子がpngのファイルをmacのカレントディレクトリからアップロード

```bash
sftp> put *.png
```

ディレクトリ指定：サブディクレトリもアップロード

```bash
sftp> put -r ディレクトリ名
```

# その他のコマンド

ヘルプコマンドがあります。

```bash
sftp> help
```

使えるコマンド一覧が表示されます。

```bash
sftp> help
Available commands:
bye                                Quit sftp
cd path                            Change remote directory to 'path'
chgrp [-h] grp path                Change group of file 'path' to 'grp'
chmod [-h] mode path               Change permissions of file 'path' to 'mode'
chown [-h] own path                Change owner of file 'path' to 'own'
df [-hi] [path]                    Display statistics for current directory or
                                   filesystem containing 'path'
exit                               Quit sftp
get [-afpR] remote [local]         Download file
help                               Display this help text
lcd path                           Change local directory to 'path'
lls [ls-options [path]]            Display local directory listing
lmkdir path                        Create local directory
ln [-s] oldpath newpath            Link remote file (-s for symlink)
lpwd                               Print local working directory
ls [-1afhlnrSt] [path]             Display remote directory listing
lumask umask                       Set local umask to 'umask'
mkdir path                         Create remote directory
progress                           Toggle display of progress meter
put [-afpR] local [remote]         Upload file
pwd                                Display remote working directory
quit                               Quit sftp
reget [-fpR] remote [local]        Resume download file
rename oldpath newpath             Rename remote file
reput [-fpR] local [remote]        Resume upload file
rm path                            Delete remote file
rmdir path                         Remove remote directory
symlink oldpath newpath            Symlink remote file
version                            Show SFTP version
!command                           Execute 'command' in local shell
!                                  Escape to local shell
?                                  Synonym for help
```

# 最後に

ターミナルでファイル操作ができる人は、SFTPでも同様に操作することができると思います。

アップロードやダウンロード時にすでにファイルが存在する場合にファイルが上書きされる点に注意して使いましょう。