But what if one or both of those files are on a different machine? Usual response would be to copy the file(s) to your local machine, then run the diff. And how often have you accidently overwritten your local copy because your fingers got ahead of your brain?
And that's why I wrote "remdiff". I consider this a pretty important script in my toolkit. You want this on your disk-to-disk backup system. Really, you do.
Put this in your path.======================================================== #!/bin/ksh yell() { echo "$0: $*" >&2; } die() { yell "$*"; rm -f /tmp/$$.*; exit 111; } try() { "$@" || die "cannot $*"; } # # Copyright (c) 2016 Nicholas Holland (nick@holland-consulting.net) # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # if [[ -z "$2" ]]; then cat <<- _ENDUSAGE usage: $0 file1 file2 where either one can be a remote file." _ENDUSAGE exit fi # This will fail if the fileNAME has a : in it. Oh well. if echo $1 |grep -q ":"; then try scp -q $1 /tmp/$$.file1 file1=/tmp/$$.file1 else file1=$1 fi if echo $2 |grep -q ":"; then try scp -q $2 /tmp/$$.file2 file2=/tmp/$$.file2 else file2=$2 fi diff -u $file1 $file2 rm -f /tmp/$$.* ========================================================
or$ remdiff localfile server:/path/to/file
or$ remdiff server:/path/to/file localfile
$ remdiff server1:/path/to/file1 server2:/path/to/file2
Tested on AIX and OpenBSD, will probably work on most Unixes with nothing more than maybe fixing the "#!/bin/ksh" line to point to your sh-compatible shell.
Files with a ':' in the file name will be handled incorrectly.
The files should be modest in size -- don't fill your /tmp partition!
It is possible to do this without a tmp file at all, but I haven't
figured out a way to handle TWO remote files without tmp files.
Basically, cat the remote file to stdout, and diff uses '-' as one of
its input files. I find it more useful to be able to diff two remote
files than huge files I don't want to copy locally.
Holland Consulting home
page
Contact Holland Consulting
since June 20, 2021
Copyright 2020, Nick Holland, Holland Consulting.