NAME
remsync - remotely synchronize file trees
SYNOPSIS
remsync -sxv tree [state-file]
remsync -duxvD tree [state-file [diff-file]]
remsync [-xv] tree [diff-file]
DESCRIPTION
Remsync synchronizes file trees of distant machines, i.e.
machines that do not have a fast network between them. It
accomplishes this in three steps:
Create a state file containing a description of the
machine to be updated.
Compute a file of differences on the source machine
using the state file to compare the two file trees.
Update the target machine using the data in the differ-
ences file.
This process requires that you move two files, a state file
from the target machine to the source machine, and a differ-
ences file from the source machine to the target machine.
The state file is an ASCII file that may be edited, usually
to make remsync ignore some files or file trees.
The argument tree may be a single file or a directory. A
directory is traversed recursively. The state-file and
diff-file arguments may be of any file type. The differ-
ences file contains an end marker, so it may be followed by
trailing junk. Standard input or output is used if these
arguments are omitted or replaced by a minus sign.
State file format
A state file has a line for each file in a tree. A line
looks like this formally for a simple file:
name mode owner group length date [link-number [last]]
The best way to show how each type of file is represented is
by example:
/ d755 0 0
bin d755 2 0
[ 644 2 0 233 759160857 1
cat 755 2 0 3772 768742021
test 755 2 0 233 759160857 1 last
dev d755 0 0
fd0 b666 0 0 200
console c600 10 0 400
sd2 b600 0 0 a02
fifo p700 2 0
opt -> usr/opt
usr ignore (Cross-device link)
The root of the tree is always represented by a /, no matter
what type of file it may be. Directory entries of the root
follow at the same level. Files in subdirectories are
indented by two spaces. (Eight spaces are replaced by a
TAB.) Normal files have their length and modified time in
the state file, devices have their device number in hex,
etc. If files are hard linked to each other then they all
get an extra "link number" to bind them together. The last
link is marked with the word last.
One usually only modifies a state file to ignore differences
between two files. One does this by replacing the file
attributes with the word ignore. (Remsync generates this
keyword too, with the reason why added in parentheses.)
OPTIONS
-s Generate a state file.
-d Generate a differences file. (The default is to apply
a differences file.)
-u Only add new files or update files with newer versions.
-x Do not cross device boundaries. This allows one to
operate on the root file system for instance ignoring
the /usr file system.
-D Debug differences file generation. With this flag no
file contents are added to the differences file. The
result is then human readable.
-v Lists the commands added to the differences file, or
the actions done applying a differences file. The out-
put looks like UNIX commands except for the words
"add", "restore" and "update" indicating addition of a
new file, replacing a file with an older version, or
replacement by a newer version.
EXAMPLES
Actions taken by the author to update his notebook "finiah"
from his main machine "darask":
finiah# remsync -s /usr /tmp/finiah.state
Edit the state file to ignore .Xauthority files and /usr/var.
finiah# tar cvf /dev/fd0 /tmp/finiah.state
darask# tar xvf /dev/fd0
darask# remsync -dv /usr /tmp/finiah.state | vol 1440 /dev/fd0
finiah# vol 1440 /dev/fd0 | remsync -v /usr
One could add a file compression/decompression program
between remsync and vol, to reduce the number of floppies to
move about, but that actually slows things down! (Note that
one only needs to shuffle two floppies about if the two
machines are adjacent. To update a remote machine it does
make sense to use compression to reduce the number of flop-
pies to carry.)
SEE ALSO
synctree(1), vol(1), tar(1).
NOTES
Nothing stops you from using remsync over a fast network of
course. Synctree can be a bit tedious if you only want to
ignore a few files. Editing a state file is then easier.
BUGS
Files are overwritten, not removed, when they are updated.
This means that links outside the tree are also updated.
The less desirable alternative to this is to break the link
before the update.
The verbose option may say that a link is to be created when
making a differences file. The link is often already there
when the update takes place, so no action is taken, and thus
no talk about it. So you may miss a few mutterings about
links if you compare the messages.
AUTHOR
Kees J. Bot (kjb@cs.vu.nl)