Can scp copy directories recursively?

Yup, use -r:

scp -rp sourcedirectory user@dest:/path
  • -r means recursive
  • -p preserves modification times, access times, and modes from the original file.

Note: This creates the sourcedirectory inside /path thus the files will be in /path/sourcedirectory


While the previous answers are technically correct, you should also consider using rsync instead. rsync compares the data on the sending and receiving sides with a diff mechanism so it doesn't have to resend data that was already previously sent.

If you are going to copy something to a remote machine more than once, use rsync. Actually, it's good to use rsync every time because it has more controls for things like copying file permissions and ownership and excluding certain files or directories. In general:

$ rsync -av /local/dir/ server:/remote/dir/

will synchronize a local directory with a remote directory. If you run it a second time and the contents of the local directory haven't changed, no data will be transferred - much more efficient than running scp and copying everything every time.

Also, rsync allows you to recover from interrupted transfers very easily, unlike scp.

Finally, modern versions of rsync by default run over ssh, so if scp is already working, rsync should pretty much be a drop-in replacement.


That is what the -r option is for. :)

See the scp man page for more info if needed.