Transfer files to and from linux using secure copy (scp)

Author: Steven Neiland

Warning: This blog entry was written two or more years ago. Therefore, it may contain broken links, out-dated or misleading content, or information that is just plain wrong. Please read on with caution.

Based on the Secure Shell (SSH) protocol, Secure Copy (SCP) is a method for transferring files securely between two computers. You can transfer between a local host and a remote host, or between two remote hosts.

The format of the scp command is as follows:

scp [flags] [source location] [destination location]

Download from remote

The first use for scp is obviously to download a file from a remote server.

scp remoteuser@remotehost:remotefile localfile

Upload to remote

The exact opposite of downloading, uploading just reverses the order of the source,destination paths.

scp localfile remoteuser@remotehost:remotefile

Copy between two remote machines

In this scenario your local machine only tells the two remote hosts to perform the transfer. The data itself is transferred directly between the two remote hosts. For this reason it is important that they are able to communicate directly to each other.

scp remoteuser1@remotehost1:remotefile1 remoteuser2@remotehost2:remotefile2


In addition to the basic operations, here are some tips and tricks for using scp.

Single and double dots

This is more of a general tip but a useful one regardless.

Using a single dot (.) in place of a file path is equivalent to specifying the current local directory. In addition specifying two dots (..) gives the parent directory of the current local directory.

SCP supports asterix

No not the little viking dude. Like ssh you can use the asterix symbol to specify all files within a directory like this.

//copies all files inside "/some/directory/" to the current local directory
scp remoteuser@remotehost:/some/directory/* .

SCP supports recursive operation

In addition to supporting the asterix, you can also specify the "-r" recursive flag to recursively copy all files and directories with the specified directory.

scp -r remoteuser@remotehost:/some/directory/* .

Use a different port number

While not too common, it may happen that you need to use scp on a host that has it configured to be on a different port number. In this situation you use the "-P" flag to specify the port number to use.


Unlike ssh, we use the uppercase "-P" flag not the lowercase "-p", and this flag must be directly in front of the (remote) host. The reason for this is because scp can be used to transfer between two remote hosts it needs to know which host is operating on with port number.

scp -P newport remoteuser@remotehost:/some/directory/* .

Reader Comments

  • Please keep comments on-topic.
  • Please do not post unrelated questions or large chunks of code.
  • Please do not engage in flaming/abusive behaviour.
  • Comments that contain advertisments or appear to be created for the purpose of link building, will not be published.

Archives Blog Listing