43

I am connected with ssh and I want to copy a directory from my local to our remote server; how can I do that? I have read several post using scp but that doesn't worked for me. Some posts suggested using rsync but in my case I just want to copy one directory.

3 Answers 3

76

If you want to copy a directory from machine a to b while logged into a:

scp -r /path/to/directory user@machine_b_ipaddress:/path/to/destination

If you want to copy a directory from machine a to b while logged into b:

scp -r user@machine_a_ipaddress:/path/to/directory /path/to/destination
4
  • I think more intuitive answer would be "from machine b to a while logged into a" anybody can swap a in the head, but would indicate source/destination much better, unless I'm crazy :) Commented Apr 10, 2020 at 20:26
  • @PawelCioch While I definitely agree with you, it's not difficult to comprehend. I did write this answer almost 3 years ago, and I wasn't very good with English :)
    – Erik
    Commented Apr 11, 2020 at 0:17
  • 3
    Well several years on, 2020, and I thank you for your answer, found it easy to read with no problems. Worked like a charm.
    – redfox05
    Commented Dec 1, 2020 at 12:01
  • 1
    Well, now the question is "how to be logged into b".
    – Nairum
    Commented Mar 31, 2023 at 12:59
11

You can use cpio or tar to create an archive as a stream on standard output, pipe that to ssh and extract the stream on the remote host. For example, using tar:

tar cf - dir | ssh remotehost 'tar xf -'

To extract the archive in a different directory on the remote host, use

tar cf - dir | ssh remotehost 'tar xfC - /path/on/remote'

If your tar supports the C option or:

tar cf - dir | ssh remotehost '
  cd /path/on/remote && tar xf -'

if not.

If on a low bandwidth connection, you may want to compress the stream:

tar cf - dir | gzip -3 | ssh remotehost '
  cd /path/on/remote && gunzip | tar xf -'

(replace gzip/gunzip with your stream compressor of choice, lzop/lzop -d may be a better choice if you find that CPU is the bottleneck).

2

Think this might work for you:

scp file user@host:/location_to_save_file

scp - secure copy - the file(s) you want to scp to remote node - the user who has permissions to scp file, i.e sysadmin, etc @ - user and host separator host - the node you are scp the file(s) :/location_to_save_file - absolute path to save the file

1
  • With the addition that you need to add the -r flag if you want to copy a directory instead of a file, like @hrk is asking. Commented Dec 22, 2022 at 8:25

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .