Is there ever a reason to use scp instead of rsync?

95,812

Solution 1

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.

Solution 2

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.

Solution 3

rsync: Transfers deltas(using its Delta Transfer Algorithm) between:

  1. local and remote hosts

scp: Transfers whole files between:

  1. local and remote hosts
  2. remote and remote hosts

Summary: scp can transfer files between two remote hosts while rsync doesn't support it.

Solution 4

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 like scp, but for a second transfer, where most files are unchanged, it will push a lot less data than scp. 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, whereas scp will start again from scratch.

Solution 5

Credits to @tomrunia at https://gist.github.com/KartikTalwar/4393116

rsync -aHAXxv --numeric-ids --delete --progress \
  -e "ssh -T -c [email protected] -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

Share:
95,812
mikebloch
Author by

mikebloch

Random programmer, loves learning new things.

Updated on September 18, 2022

Comments

  • mikebloch
    mikebloch over 1 year

    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).

    • Shadur
      Shadur almost 12 years
      Short answer: No. scp is never harmful.
    • Gilles 'SO- stop being evil'
      Gilles 'SO- stop being evil' almost 12 years
      @Shadur scp is harmful in that it overwrites existing target files by default. So's rsync, but it at least allows limiting the possible damage with -u.
    • Alex Chamberlain
      Alex Chamberlain almost 12 years
      @Gilles As with any tool, you must understand what it does and how it does it to use it safely.
    • Shadur
      Shadur almost 12 years
      In that context, regular cp and rm 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.
    • mikebloch
      mikebloch almost 12 years
      scp -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.
    • Gert van den Berg
      Gert van den Berg over 8 years
      The other combination that I sometimes use, mostly with lots of small files, is ssh 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.
    • Kusalananda
      Kusalananda about 6 years
      On systems without rsync installed, using rsync is (obviously) not even possible.
  • evanda
    evanda almost 12 years
    Also, pretty sure rsync has to be installed on the other end.
  • mikebloch
    mikebloch almost 12 years
    @ckhan, no it can copy without having anything installed in the other side, it'll just be less efficient.
  • mikebloch
    mikebloch almost 12 years
    @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)
  • Alex Chamberlain
    Alex Chamberlain almost 12 years
    I like scp's simplicity.
  • Simon Gates
    Simon Gates almost 12 years
    @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.
  • mikebloch
    mikebloch almost 12 years
    @AlexChamberlain why is scp simpler than rsync? (and the point that you have to have rsync on server is a valid point).
  • mikebloch
    mikebloch about 11 years
    Hmmm, why is it so? rsync a host:b is equivalent to scp a host:b, same number of arguments.
  • Nils
    Nils about 11 years
    @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.
  • iTag
    iTag almost 11 years
    Might 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.
  • Lester Cheung
    Lester Cheung about 8 years
    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.
  • Devesh Saini
    Devesh Saini almost 8 years
    Well, rsync -vP username@host:/path/to/file . will do this too. See this answer on Stackoverflow
  • brandizzi
    brandizzi about 7 years
    rsync can transfer files between two remote hosts. In fact, rsync a host:b is equivalent to scp a host:b.
  • Devesh Saini
    Devesh Saini about 7 years
    That'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
  • Błażej Michalik
    Błażej Michalik over 5 years
    scp will run over SSH just as rsync does. In fact, the only thing scp on the client side does is it runs scp with -f/-t flags on the remote via SSH exec_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.