The Unix command scp (which stands for "secure copy protocol") is a simple tool for uploading or downloading files (or directories) to/from a remote machine. The transfer is done on top of SSH, which is how it maintains its familiar options (like for specifying identities and credentials) and ensures a secure connection. It's really helpful to be able to move around files between any machine that supports SSH.
Even if you don't already know how to use the command, scp
should be a bit more familiar to you thanks to its similarity to ssh
. The biggest differences come with specifying file/directory paths. In this short article we'll be dealing with directories specifically.
Downloading a Directory
In this use-case, we want to use scp
to download a directory from a remote server to our local machine. To achieve this, we'll use the -r
flag, which tells scp
to recursively copy all of the directory's contents to our machine.
Here is an example of using scp
to download a directory:
$ scp -r [email protected]:/path/to/remote/source /path/to/local/destination
Pretty simple, right? The -r
flag is the only difference between downloading a single file and downloading an entire directory. With -r
specified, the directory tree is recursively traversed and each file encountered is downloaded.
One important thing to note is that scp
does follow symbolic links within directories, so just be aware in case this matters for your purposes.
Uploading a Directory
The same exact concepts as downloading a directory apply here as well. You'll probably notice that the only difference is where we specify the source directory within the actual command.
Here is an example of using scp
to upload a folder:
$ scp -r /path/to/local/source [email protected]:/path/to/remote/destination
When the source path comes first, like in the example above, it is assumed to be referring to a directory on your local machine, which is then recursively transferred to the destination machine thanks to the -r
flag, as before.
Conclusion
For more information on the scp
command, I'd highly encourage you to check out the docs with man scp
. Not only is this the fastest way to learn about the command, but it's a good habit to get into for any Unix command.