Is there a reason to use scp
instead of rsync
? I can see no reason for using scp
ever again, rsync
does everything that scp
does, with more safety (can preserve symlinks etc).
6 Answers
scp provides a cp like method to copy files from one machine to a remote machine over a secure SSH connection.
rsync allows you to syncronise remote folders.
They are different programs and both have their uses. scp is always secure, whereas rsync must travel over SSH to be secure.

- 2,060
-
14
-
4@ckhan, no it can copy without having anything installed in the other side, it'll just be less efficient. – mikebloch May 31 '12 at 08:40
-
@Alex so the answer is: "scp ensures that you will always encrypt the data on the wire, rsync doesn't" (the fact that rsync has more features doesn't mean it can't be used as a mere cp) – mikebloch May 31 '12 at 08:41
-
2
-
2@mikebloch How do you do that? Is it a new feature? Just tried this using version 3.0.9. and it complained it couldn't find
rsync
on the remote. – Alexios May 31 '12 at 10:00 -
1@mikebloch, it has to be installed on the server to do the checksum computations, which can add a lot of cpu load to the server. This is why most large sites don't support it, and why
zsync
was created as an alternative. – psusi May 31 '12 at 22:17 -
1@AlexChamberlain why is scp simpler than rsync? (and the point that you have to have rsync on server is a valid point). – mikebloch Jun 10 '12 at 12:10
-
scp
will run over SSH just asrsync
does. In fact, the only thingscp
on the client side does is it runsscp
with-f
/-t
flags on the remote via SSHexec_command
channel, and writes / reads the stream that is provided as stdin / stdout. So the third paragraph of this answer does not contribute anything here. – Błażej Michalik Oct 17 '18 at 00:27
One of the main things (which I think no one mentioned) is that if you are transferring large amounts of data or files, and if the transfer is disconnected before completion for any reason, rsync will pick it up where it left off. Whereas scp doesn't.
I use scp if I want to transfer one or couple of files or directories. I go to rsync for multi GB size data.

- 261
-
3Might be worth adding that the
--partial
flag is useful when transferring large files.rsync
will pick up where it left off within the file rather than starting that file again. – Flup Jul 26 '13 at 15:28 -
As @Flup mentioned rsync won't leave anyt file-in-transit around for you to resume unless you use the --partial option. These files are by default hidden in the target directory. You can use --partial-dir to put all of these files in a single directory. – Lester Cheung Mar 01 '16 at 10:56
-
Well,
rsync -vP username@host:/path/to/file .
will do this too. See this answer on Stackoverflow – Devesh Saini Aug 12 '16 at 18:20
rsync: Transfers deltas(using its Delta Transfer Algorithm) between:
- local and remote hosts
scp: Transfers whole files between:
- local and remote hosts
- remote and remote hosts
Summary: scp
can transfer files between two remote hosts while rsync
doesn't support it.

- 249
-
rsync can transfer files between two remote hosts. In fact,
rsync a host:b
is equivalent toscp a host:b
. – brandizzi Feb 19 '17 at 13:34 -
1That's what I wrote, rsync can transfer deltas between local and remote hosts but scp is not limited to just that, it can transfer deltas between two remote hosts. @brandizzi – Devesh Saini Feb 19 '17 at 14:08
User Chris at Webhosting Talk writes:
rsync
compares the files at each end and transfers only the changed parts of changed files. When you transfer files the first timeo it behaves pretty much likescp
, but for a second transfer, where most files are unchanged, it will push a lot less data thanscp
. It's also a convenient way to restart failed transfers - you just reissue the same command and it will pick up where it left off the time before, whereasscp
will start again from scratch.

- 8,678

- 305
scp
is simpler to use as it takes less arguments. I catch myselv using scp instead of rsync
if I only transfer a single file. Propably I am just to lazy to define an alias to rsync... ;-)

- 18,492
-
4Hmmm, why is it so?
rsync a host:b
is equivalent toscp a host:b
, same number of arguments. – mikebloch Apr 09 '13 at 05:40 -
1@mikebloch Two letters more to type... ;-) In the past I had to supply "-e ssh -a" to get the proper result. Now that "-e ssh" is default this might be a different game. – Nils Apr 09 '13 at 14:44
Credits to @tomrunia at https://gist.github.com/KartikTalwar/4393116
rsync -aHAXxv --numeric-ids --delete --progress \
-e "ssh -T -c aes128-gcm@openssh.com -o Compression=no -x" \
[source_directory] user@hostname:[target_directory]/
Pay attention to --delete
, don't use it if you want to keep extraneous files in dest dirs
-u
. – Gilles 'SO- stop being evil' May 31 '12 at 22:46cp
andrm
would be considered "harmful" -- and if you define "harmful" as "can screw me over if I do something stupid",rsync
isn't any less harmful. – Shadur-don't-feed-the-AI Jun 01 '12 at 09:31scp -a
will not work, and will be slower. I see no reason to use it, if you have something else at hand. rsync is less harmfull in the sense that it can at least preserve symlinks, so can cp. – mikebloch Jun 10 '12 at 12:09ssh user@source "cd /source/dir; tar -cf - stuff i want to send" | { cd /dest/dir; tar -xf -; }
. (Sometimes adding a gzip (mostly -1, I tend to do it over LAN connections) to the pipeline, depending on the data). It mainly handles large amount of small files better than most methods, if you have a reliable connection. – Gert van den Berg Dec 30 '15 at 04:51rsync
installed, usingrsync
is (obviously) not even possible. – Kusalananda Feb 21 '18 at 10:23