FILESYNC(1) User Commands FILESYNC(1)
NAME
filesync - synchronize ordinary, directory or special files
SYNOPSIS
filesync [
-aehmnqvy] [
-o src | dst]
[
-f src | dst | old | new] [
-r directory]...
filesync [
-aehmnqvy]
-s source-dir -d dest-dir filename...
DESCRIPTION
The
filesync utility
synchronizes files between multiple computer
systems, typically a server and a portable computer.
filesync synchronizes ordinary, directory or special files. Although intended for
use on nomadic systems,
filesync is useful for backup and file
replication on more permanently connected systems.
If files are synchronized between systems, the corresponding files on
each of the systems are
identical. Changing a file on one or both of the
systems causes the files to become different (not synchronized). In order
to make the files identical again, the differences between the files must
be
reconciled. See
Reconciling and Synchronizing Files for specific
details about how
filesync reconciles and synchronizes files.
There are two forms of the
filesync command. The first form of
filesync is invoked without file arguments. This form of
filesync reconciles
differences between the files and systems specified in the
$HOME/.packingrules file.
$HOME/.packingrules is a packing rules list for
filesync and contains a list of files to be kept synchronized. See
packingrules(5).
The second form of
filesync copies specific files from a directory on the
source system to a directory on the destination system. In addition, this
form of
filesync adds the file or files specified as arguments (
filename)
to
$HOME/.packingrules. See
-s and
-d for information about specifying
directories on source and destination systems. See
OPERANDS for details
about specifying file (
filename) arguments.
Multiple
filesync commands are cumulative (that is, the specified files
are added to the already existing packing rules file list). See
Multiple filesync Commands.
Reconciling and Synchronizing Files
filesync synchronizes files between computer systems by performing the
following two tasks:
1.
filesync examines the directories and files specified in the
packing rules file on both systems, and determines whether or
not they are identical. Any file that differs requires
reconciliation.
filesync also maintains a baseline summary in the
$HOME/.filesync-base file for all of the files that are being
monitored. This file lists the names, types, and sizes of all
files as of the last reconciliation.
2. Based on the information contained in the baseline file and
the specified options (see
Resolving filesync Conflicts),
filesync determines which of the various copies is the correct
one, and makes the corresponding changes to the other system.
Once this has been done, the two copies are, again, identical
(synchronized).
If a source file has changed and the destination file has not,
the changes on the source system are propagated to the
destination system. If a destination file has changed and the
corresponding source file has not, the changes on the
destination file are propagated to the source system. If both
systems have changed (and the files are not still identical) a
warning message will be printed out, asking the user to
resolve the conflict manually. See
Resolving filesync Conflicts.
Resolving filesync Conflicts
In cases where files on both sides have changed,
filesync attempts to
determine which version should be chosen. If
filesync cannot
automatically determine which version should be selected, it prints out a
warning message and leaves the two incompatible versions of the file
unreconciled.
In these cases, you must either resolve the differences manually, or tell
filesync how to choose which file should win. Use the
-o and
-f options
to tell
filesync how to resolve conflicts (see
OPTIONS).
Alternatively, for each conflicting file, you can examine the two
versions, determine which one should be kept, and manually bring the two
versions into agreement (by copying, deleting, or changing the ownership
or protection to be correct). You can then re-run
filesync to see
whether or not any other conflicts remain.
Packing Rules File
The packing rules file
$HOME/.packingrules contains a list of files to be
kept synchronized. The syntax of this file is described in
packingrules(5).
The
$HOME/.packingrules file is automatically created if users invoke
filesync with filename arguments. By using
filesync options, users can
augment the packing rules in
$HOME/.packingrules.
Many users choose to create the packing rules file manually and edit it
by hand. Users can edit
$HOME/.packingrules (using any editor) to
permanently change the
$HOME/.packingrules file, or to gain access to
more powerful options that are not available from the command line (such
as
IGNORE commands). It is much easier to enter complex wildcard
expressions by editing the
$HOME/.packingrules file.
Baseline File
$HOME/.filesync-base is the
filesync baseline summary file.
filesync uses the information in
$HOME/.filesync-base to identify the differences
between files during the reconciliation and synchronization process.
Users do not create or edit the baseline file. It is created
automatically by
filesync and records the last known state of agreement
between all of the files being maintained.
Multiple filesync Commands
Over a period of time, the set of files you want to keep synchronized can
change. It is common, for instance, to want to keep files pertaining to
only a few active projects on your notebook. If you continue to keep
files associated with every project you have ever worked on synchronized,
your notebook's disk will fill up with old files. Each
filesync command
will waste a lot of time updating files you no longer care about.
If you delete the files from your notebook,
filesync will want to perform
the corresponding deletes on the server, which would not be what you
wanted. Rather, you would like a way to tell
filesync to stop
synchronizing some of the files. There are two ways to do this:
1. Edit
$HOME/.packingrules. Delete the rules for the files that
you want to delete.
2. Delete
$HOME/.packingrules. Use the
filesync command to
specify the files that you want synchronized.
Either way works, and you can choose the one that seems easiest to you.
For minor changes, it is probably easier to just edit
$HOME/.packingrules. For major changes it is probably easier to start
from scratch.
Once
filesync is no longer synchronizing a set of files, you can delete
them from your notebook without having any effect on the server.
Nomadic Machines
When using
filesync to keep files synchronized between nomadic machines
and a server, store the packing rules and baseline files on the nomadic
machines, not the server. If, when logged into your notebook, the
HOME environment variable does not normally point to a directory on your
notebook, you can use the
FILESYNC environment variable to specify an
alternate location for the packing rules and baseline files.
Each nomadic machine should carry its own packing rules and baseline
file. Incorrect file synchronization can result if a server carries a
baseline file and multiple nomadic machines attempt to reconcile against
the server's baseline file. In this case, a nomadic machine could be
using a baseline file that does not accurately describe the state of its
files. This might result in incorrect reconciliations.
To safeguard against the dangers associated with a single baseline file
being shared by more than two machines,
filesync adds a default rule to
each new packing rules file. This default rule prevents the packing
rules and baseline files from being copied.
OPTIONS
The following options are supported:
-a Force the checking of Access Control Lists
(
ACLs ) and attempt to make them agree for
all new and changed files. If it is not
possible to set the
ACL for a particular
file,
filesync stops
ACL synchronization for
that file.
Some file systems do not support
ACLs . It is
not possible to synchronize
ACLs between file
systems that support
ACLs and those that do
not; attempting to do so will result in
numerous error messages.
-d dest-dir Specify the directory on the destination
system into which
filename is to be copied.
Use with the
-s source-dir option and the
filename operand. See
-s and
OPERANDS.
-e Flag all differences. It may not be possible
to resolve all conflicts involving modes and
ownership (unless
filesync is being run with
root privileges). If you cannot change the
ownership or protections on a file,
filesync will normally ignore conflicts in ownership
and protection. If you specify the
-e (everything must agree) flag, however,
filesync will flag these differences.
-f src |
dst |
old |
new The
-f option tells
filesync how to resolve
conflicting changes. If a file has been
changed on both systems, and an
-f option has
been specified,
filesync will retain the
changes made on the favored system and
discard the changes made on the unfavored
system.
Specify
-f src to favor the source-system
file. Specify
-f dst to favor the
destination-system file. Specify
-f old to
favor the older version of the file. Specify
-f new to favor the newer version of the
file.
It is possible to specify the
-f and
-o options in combination if they both specify
the same preference (
src and
dst). If
-f and
-o conflict, the
-f option is ignored. See
the
-o option description.
-h Halt on error. Normally, if
filesync encounters a read or write error while
copying files, it notes the error and the
program continues, in an attempt to reconcile
other files. If the
-h option is specified,
filesync will immediately halt when one of
these errors occurs and will not try to
process any more files.
-m Ensure that both copies of the file have the
same modification time. The modification time
for newly copied files is set to the time of
reconciliation by default. File changes are
ordered by increasing modification times so
that the propagated files have the same
relative modification time ordering as the
original changes. Users should be warned that
there is usually some time skew between any
two systems, and transferring modification
times from one system to another can
occasionally produce strange results.
There are instances in which using
filesync to update some (but not all) files in a
directory will confuse the
make program. If,
for instance,
filesync is keeping
.c files
synchronized, but ignoring
.o files, a
changed
.c file may show up with a
modification time prior to a
.o file that
was built from a prior version of the
.c file.
-n Do not really make the changes. If the
-n option is specified,
filesync determines what
changes have been made to files, and what
reconciliations are required and displays
this information on the standard output. No
changes are made to files, including the
packing rules file.
Specifying both the
-n and
-o options causes
filesync to analyze the prevailing system and
report the changes that have been made on
that system. Using
-n and
-o in combination
is useful if your machine is disconnected
(and you cannot access the server) but you
want to know what changes have been made on
the local machine. See the
-o option
description.
-o src | dst The
-o option forces a one-way
reconciliation, favoring either the source
system (
src) or destination system (
dst).
Specify
-o src to propagate changes only from
the source system to the destination system.
Changes made on the destination system are
ignored.
filesync aborts if it cannot access
a source or destination directory.
Specify
-o dst to propagate changes only from
the destination system to the source system.
Changes made on the source system are
ignored.
filesync aborts if it cannot access
a source or destination directory.
Specifying
-n with the
-o option causes
filesync to analyze the prevailing system and
reports on what changes have been made on
that system. Using
-n and
-o in combination
is useful if a machine is disconnected (and
there is no access to the server), but you
want to know what changes have been made on
the local machine. See the
-n option
description.
It is possible to specify the
-o and
-f options in combination if they both specify
the same preference (
src or
dst). If
-o and
-f options conflict, the
-f option will be
ignored. See the
-f option description.
-q Suppress the standard
filesync messages that
describe each reconciliation action as it is
performed.
The standard
filesync message describes each
reconciliation action in the form of a UNIX
shell command (for example,
mv,
ln,
cp,
rm,
chmod,
chown,
chgrp,
setfacl, and so forth).
-r directory Limit the reconciliation to
directory.
Specify multiple directories with multiple
-r specifications.
-s source-dir Specify the directory on the source system
from which the
filename to be copied is
located. Use with the
-d dest-dir option and
the
filename operand. See the
-d option
description and
OPERANDS.
-v Display additional information about each
file comparison as it is made on the standard
output.
-y Bypass safety check prompts. Nomadic machines
occasionally move between domains, and many
of the files on which
filesync operates are
expected to be accessed by NFS. There is a
danger that someday
filesync will be asked
to reconcile local changes against the wrong
file system or server. This could result in a
large number of inappropriate copies and
deletions. To prevent such a mishap,
filesync performs a few safety checks prior
to reconciliation. If large numbers of files
are likely to be deleted, or if high level
directories have changed their I-node
numbers,
filesync prompts for a confirmation
before reconciliation. If you know that this
is likely, and do not want to be prompted,
use the
-y (yes) option to automatically
confirm these prompts.
OPERANDS
The following operands are supported:
filename The name of the ordinary file, directory, symbolic link, or
special file in the specified source directory (
source-dir)
to be synchronized. Specify multiple files by separating each
filename by spaces. Use the
filename operand with the
-s and
-d options. See
OPTIONS.
If
filename is an ordinary file, that ordinary file will be
replicated (with the same
filename) in the specified
destination directory (
dest-dir).
If
filename is a directory, that directory and all of the
files and subdirectories under it will be replicated
(recursively) in the specified destination directory (
dest- dir).
If
filename is a symbolic link, a copy of that symbolic link
will be replicated in the specified destination directory
(
dest-dir).
If
filename is a special file, a special file with the same
major or minor device numbers will be replicated in the
specified destination directory. (
dest-dir). Only super-
users can use
filesync to create special files.
Files created in the destination directory (
dest-dir) will
have the same owner, group and other permissions as the files
in the source directory.
If
filename contains escaped shell wildcard characters, the
wildcard characters are stored in
$HOME/.packingrules and
evaluated each time
filesync is run.
For example, the following would make sure that the two
specified files, currently in
$RHOME, were replicated in
$HOME:
filesync -s $RHOME -d $HOME a.c b.c The following example would ensure that all of the
*.c files
in
$RHOME were replicated in
$HOME, even if those files were
not created until later.
filesync -s $RHOME -d $HOME '*.c' If any of the destination files already exist,
filesync ensures that they are identical and issues warnings if they
are not.
Once files have been copied, the distinction between the
source and destination is a relatively arbitrary one (except
for its use in the
-o and
-f switches).
ENVIRONMENT VARIABLES
FILESYNC Specifies the default location of the
filesync packing
rules and baseline files. The default value for this
variable is
$HOME. The suffixes
.packingrules and
.filesync-base will be appended to form the names of the
packing rules and baseline files.
LC_MESSAGES Determines how diagnostic and informative messages are
presented. In the "C" locale, the messages are presented
in the default form found in the program itself (in most
cases, U.S. English).
EXIT STATUS
Normally, if all files are already up-to-date, or if all files were
successfully reconciled,
filesync will exit with a status of
0. However,
if either the
-n option was specified or any errors occurred, the exit
status will be the logical OR of the following:
0 No conflicts, all files up to date.
1 Some resolvable conflicts.
2 Some conflicts requiring manual resolution.
4 Some specified files did not exist.
8 Insufficient permission for some files.
16 Errors accessing packing rules or baseline file.
32 Invalid arguments.
64 Unable to access either or both of the specified
src or
dst directories.
128 Miscellaneous other failures.
FILES
$HOME/.packingrules list of files to be kept synchronized
$HOME/.filesync-base baseline summary file
SEE ALSO
packingrules(5),
attributes(7) September 8, 2015
FILESYNC(1)