Amazonのアソシエイトとして、ラズパイダ(raspida.com)は適格販売により収入を得ています。詳しくは当サイトの プライバシーポリシーをご覧ください。

scp(Secure Copy)は、SSHツールの一部なので、SSH接続はできている状態で使えます。 ラズパイも使い始めるときにSSHを有効にしておきます。現行ではRaspberry Pi ImagerでOSイメージを書き込む際、オプションでSSHを設定してから書き込めば最初から使えることになりますね。

私はscpコマンドを使って手元のマシンへ取り出すことが多いため、ローカルマシン(Mac)のターミナルから実行しています。逆にRaspberry Pi側のターミナルからローカルマシン(Mac)を指定して送り出すことは滅多にしません。 ですから、scpコマンド自体はMacにあるscpを実行していて、Raspberry Pi側のscpを実行していないわけです。

Windows OSのことはちょっと分かりません。ごめんなさい。

ファイルの指定方法

scpコマンドでは、手元のローカルマシンとRaspberry Pi OSを指定することになります。もちろんその逆も然りで、Raspberry Pi OS側からコピー先である手元のローカルマシンを指定することで逆の指定順になります。

具体例として、手元のローカルマシンのターミナルから実行(scpを実行する側)したと仮定します。というか、私の場合はいつもそうしています。

私はWindowsではなくMacなので、Mac側を指定するのがちょっとパスが長いことや、セキュリティ設定の変更などが面倒に感じるからです。(リモートログオン)

Mac側(scp実行側)で予めファイルを保存したいディレクトリに移動してコマンドを実行すれば、.(ドット)の指定だけで済むのもお手軽だからです。

manページにある書式からすれば、次のように書かれています。

scp [[user@]ホスト 1:]ファイル 1[...] [[user@]ホスト 2:]ファイル 2

具体例1

scpコマンドを実行するマシンはローカルマシン(例:Mac)とした場合

Raspberry Pi側のファイルを指定し手元のローカルマシンへ、という書式です。

scp pi@192.168.0.51:/home/pi/Pictures/2025-01.png .

具体例2

もう1つは、手元のローカルマシンにあるファイルをRaspberry Piへ送り出す、という書式です。

scpコマンドを実行するマシンはローカルマシン(例:Mac)とした場合

scp ./config.txt pi@192.168.0.51:/home/pi

逆でもいい

これがRaspberry Pi 側のターミナルで実行するなら、指定する順番が左右で逆になります。

scpコマンドを実行するマシンはRaspberry Piの場合

scp /home/pi/Pictures/2025-01.png raspida_mac@192.168.0.30:/Users/raspida/Downloads/

具体的には左右のパス指定は次の通りです。

scp (オプション)転送するファイルへのパス 転送先の場所のパス

Raspberry Pi 側でscpを実行するにしても、転送するファイルを取り出したい側(この場合はMac)、転送先の場所はRaspberry Pi という書き方もできます。

具体例2の場合でも次のように書けます。

scp raspida_mac@192.168.0.30:/Users/raspida/Download/config.txt /home/pi

このscpコマンドを実行するマシン側を起点として、送るのか受け取るのかで指定した方が簡単かもしれません。

私はいつもローカルマシン側(例:Mac)からscpコマンドを実行する形で使っています。左右が逆になるだけで同じですけどね。

ワイルドカードの使用

ファイル名こそ違うけど、拡張子が同じファイルをコピーしたいなら、ワイルドカード(*)が便利です。

Raspberry Pi OS上ではそのまま使えるかと思います。Mac側だとエラーになってしまうため、別の方法で使用します。

通常だと次のように指定しますよね。

scp pi@192.168.0.51:/home/pi/Pictures/2025-01* .

Mac上だとエラーというかzsh: no matches found:なので、別の2つの方法で実行しています。

1.シングル(orダブル)コーテーションで囲う

最近まで知りませんでした。シングル(orダブル)コーテーションで囲えば、ワイルドカードのアスタリスクをそのまま使えるのを知りました。

これは慣れない人には分かりやすいですね。

scp pi@192.168.0.51:/home/pi/Pictures/'2025-01*' .
scp pi@192.168.0.51:/home/pi/Pictures/"2025-01*" .
scp 'pi@192.168.0.51:/home/pi/Pictures/2025-01*' .

2.エスケープ処理と正規表現での指定

アスタリスクはエスケーブ処理するのが一般的かな。正規表現ですね。

scp pi@192.168.0.51:/home/pi/Pictures/2025-01\* .
scp pi@192.168.0.51:/home/pi/Pictures/\*.png .

パターンマッチというのか、グルーピングのように、{}で2つのファイルを指定するやり方も使えます。

scp pi@192.168.0.51:/home/pi/\{a.png,b.mp4\} .

ここでは正規表現を解説しませんが、大量のファイルから特定のファイルを指定するのに使いますね。

■Pi 5は8GBモデルがオススメ

よく実行するコマンドパターン例

ラズパイダを運営している身として、Raspberry Piでスクリーンショットを撮ることがよくあります。そのため、Picturesにあるスクリーンショットを手元のローカルマシンへコピーするためにscpコマンドは使いまくりです。

面倒なので、ディレクトリ毎コピーしてしまいます。これが手っ取り早い。書式としては次のようになります。コピーで取り出したい側のターミナルでscpコマンドを実行しています。Raspberry Pi OS側ではありません。

scp -r pi@192.168.0.51:/home/pi/Pictures .

ホームディレクトリに新規ディレクトリを作成して、その中に転送したいファイル群を予めコピーや移動をしておいてから手元のマシンへコピーすることも多いです。

scp -r pi@192.168.0.51:/home/pi/files .

移動やコピーはGUIがあれば、画面を見ながらマウスを使ってもいいですし、同じくコマンド実行で済ませます。やはり拡張子別に処理することが多いですね。これはRaspberry Pi OS側のターミナルで実行します。

cp \*.png /home/pi/files
mv \*.png /home/pi/files

ホームディレクトリ直下へ、複数のファイルがゴチャゴチャとある場合は、拡張子別か、ファイル名の一部をワイルドカードでコピーしています。

scp pi@192.168.0.51:/home/pi/2015\* .
scp pi@192.168.0.51:/home/pi/\*.png .

私の場合、スクリーショットや設定ファイルを手元のマシンへ取り出すことがほとんどなので、いつも決まった書式で使っています。オプションも-rくらいで他はその時に調べてから指定する程度です。

いつもよく使っているコマンドの1つ

いつもmacOSのターミナルからRaspberry Piのキャプチャ画像を取り出すのに使っています。

先にmacOS側で取り出す先のディレクトリへ移動しておきます。それなら.(ドット)だけで指定できます。

cd コピーしたいディレクトリ
scp raspida@192.168.0.20:/home/raspida/Pictures/"*.png" .

大体、こんな感じでサクッと取り出しています。IPアドレスはもちろんホスト名でもOKです。

scp raspida@pi5-test.local:/home/raspida/Pictures/"*.png" .

オプションなど詳しいことはSCPのmanページなどを参考にしてください。

参考:

scp(1) manページ