How To Transfer Files to Raspberry Pi
If you are working with a Raspberry Pi and you are accessing it remotely, chances are you will need to transfer files to that Raspberry Pi. This is going to come up at some point. Here are some quick answers. If you need more info or want to try other methods, keep reading past the quick answer.
From OSX, Linux, BSD:
scp my-file.txt pi@my-raspberry-pi-server:/home/pi
Download WinSCP HERE and just fill in the parameters.
More Options / Details
Here are a few different methods you could use to transfer files to a Raspberry Pi. We’re going to cover them all:
- Samba Share
- SFTP ( different from FTPS )
We’re assuming that you are running Linux on your Raspberry Pi and either Linux, Windows, or OSX on your client system. The top two tool choices are SCP and Samba. If you just want to transfer some files over or if you want to automate that transfer, SCP is a good choice. If you want to mount a directory as though it were a drive on your local system then Samba is a great choice. SFTP and SSHFS are also OK choices that might be good options depending on how you like to work.
How you actually connect to your Raspberry Pi will depend on what OS you are connecting from and what tools you prefer to use. We’re going to show you how to connect from any of these systems:
This method allows you to specify a source and destination as parameters in a command. You don’t actually mount or browse the remote filesystem. This is usually done from the command line on Linux and OSX. For windows people typically use GUI tools like WinSCP. You can also apparently use SCP with PowerShell.
From OSX, Linux, BSD you can copy a single file to a directory like this:
scp my-file.txt pi@my-raspberry-pi-server:/home/pi
You can copy a directory using the “-r” flag like this:
scp -r my-dir pi@my-raspberry-pi-server:/home/pi
From Windows you will generally use a tool WinSCP. This gives you a nice drag and drop interface. Download WinSCP HERE and just fill in the parameters.
Another tool for Windows that you will often see people recommend is called FileZilla. I would NOT recommend it. It has a history of being packaged together with malware. You might be able to get clean versions of it today but I still wouldn’t trust it.
This is an excellent method if you want an actual share that you can mount and browse. It is also a good option if multiple people might need to access the same files. This does take a tiny bit of effort to get setup but it isn’t a big deal.
Step one would be to set up Samba on your Raspberry Pi.
sudo apt-get update sudo apt-get install samba samba-common-bin
Edit your Samba config file:
sudo nano /etc/samba/smb.conf
It should look somewhat like this:
[global] netbios name = Pi server string = The Pi File Center workgroup = WORKGROUP [MYHOME] path = /home/pi comment = a home directory writeable=Yes create mask=0777 directory mask=0777 public=no
Set a Samba Password:
sudo smbpasswd -a pi
sudo service smbd restart
From Windows you can access the share through File Explorer:
- Open Windows File Explorer
- Click on Network
- Click on your Raspberry Pi
From Linux you can mount your share. Make sure you have the client tools installed. This command should work on Ubuntu:
sudo apt-get install cifs-utils
Mount the share like this:
sudo mount -t cifs -o vers=1.0,user=pi,pass=xxxxxxxxx \ //RASPBERRYPI/MYHOME /mnt
On OSX you can mount a Samba share.
- Open Finder
- type [Command]+[K], this will bring up the ‘Connect to Server’ window
- Enter the URL for your share like this: smb://RASPBERRYPI/MYHOME
- Click ‘Connect’
- Enter your username and password and click “OK”
This stands for Secure File Transfer Protocol or SSH File Transfer Protocol. It is basically like using FTP over an SSH connection. It allows you to navigate the remote system and transfer files.
Linux / OSX
From Linux or OSX you can use the following command to establish a connection:
Here are some SFTP commands to get you started:
|pwd||show current dir ( remote )|
|ls||show files ( remote )|
|cd my-dir||change dir ( remote )|
|lpwd||show current dir ( local )|
|lls||list files ( local )|
|lcd my-dir||change dir ( local )|
|get remoteFile localFile||download a file|
|get -r someDirectory||download a directory|
|get -Pr someDirectory||download a directory and preserve permissions|
|put localFile||upload file|
|put -r localDirectory||download a directory|
|df -h||show disk usage|
For Windows you will probably just want to use WinSCP the same way that you would with SCP. Download WinSCP HERE and just fill in the parameters.
Another neat tool you can use to transfer files is SSHFS. This basically allows you to mount a remote directory directly over ssh. The syntax is really simple on Linux. It is easier and more flexible than scp and sftp.
You might need to install this first on older versions of Ubuntu. I didn’t need to install it on Ubuntu 19.04. You can install like this if needed but see if it is installed already first.
sudo apt-get install sshfs
You can mount a remote dir over ssh like this:
Unmount it like this:
umount -u /home/user1/pi
Windows and OSX
You can use this on Windows and OSX too. OSX looks a bit more involved. You can find instructions on getting it setup HERE. Using WinSCP should allow you to do this from Windows (the same tool we looked at for scp and sftp).
Don’t use FTP. You can but there is really no reason to do this. It has been obsolete since before the first Raspberry Pi had ever been created. It is an insecure protocol that doesn’t encrypt your data. That may not matter on a local network but there is still no reason to set this up and use it when more secure options are easier to use.