Remote Diff

Ever wanted to do a diff between a local file and a remote
one?  I have, so I wrote a simple shell script that'll do it for
you.  It requires scp, diff, and rm to be available on your system, which should be the case on any modern *nix.  The -b
option to diff tells it to ignore white-space difference.  If you
don't have password-less SSH authentication set up, you'll want to
remove the >& /dev/null trailers from the two scp lines so you get your prompts.

To run, just drop this into /usr/bin (or somewhere else on your path), make it executable, and call it just like diff, except with scp-compatible file paths.

#!/bin/sh
#
# this acts as a remote diff program, accepting two files and displaying
# a diff for them.  Zero, one, or both files can be remote.  File paths
# must be in a format `scp` understands: [[user@]host:]file

if [ "$1" = "" -o "$2" = "" ]; then
    echo "Usage: `basename $0` file1 file2"
    exit 1
fi

scp $1 rdiff.1 >& /dev/null
scp $2 rdiff.2 >& /dev/null
diff -b rdiff.1 rdiff.2
rm -f rdiff.1 rdiff.2

6 Responses to “Remote Diff”


  1. 1 muriloq

    Great script, thanks a lot!

  2. 2 horst

    this will happily overwrite the two files "rdiff.1″ and "rdiff.2″, should they exist in the current directory.

    if you really want to diff a _local_ file and a remote one, use something like
    ssh remotehost 'cat remotefile' | diff - localfile
    …and you don't have to worry about how to create good temporary files

  3. 3 Barney

    horst,

    You are right, of course. A much better way to do it. I seem to be constantly forgetting how darn versatile ssh is: so much more than just a secure shell.

  4. 4 Jürgen

    What I actually have to write, and soon, is a remote *recursive* diff. Write it, or find one (which is how I got here :)

  5. 5 Kul

    For recursive diff, you could try using nfs, and pretend they are both local. Obviously using –recursive with diff :-)
    NFS wont be so great with your transit costs if you have lots of large files though. Great for LAN environments! - -

  6. 6 John Hunt

    Recursive remote diff?? Aren't we getting into svn/cvs at that point :)

Leave a Reply