PACKINGRULES(4) File Formats and Configurations PACKINGRULES(4)


NAME


packingrules - packing rules file for filesync

SYNOPSIS


$HOME/.packingrules


DESCRIPTION


$HOME/.packingrules is a packing rules file for filesync.
$HOME/.packingrules contains a list of directories and files that are to
be packed and synchronized. It also contains a list of directories and
files that are to be specifically excluded from packing and
synchronization. See filesync(1).

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 manually create the packing rules file 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.

Blank lines and lines that begin with a pound sign (`#') are ignored.

Any line can be continued by placing a backslash (`\') immediately
before the NEWLINE.

All other lines in the $HOME/.packingrules file have one of the
following formats:

PACKINGRULES

major. minor. This line is not actually required, but it should be
the first line of every packing rules file. This line identifies the
packing rules file for the file(1) command and specifies a format
version number. The current version number is 1.1. See file(1).


BASE directory-1 [directory-2]

This line identifies a directory (or pair of directories) under which
files should be packed and synchronized. At least one directory name
must be specified. For rules that are to be used by filesync a second
directory name (where the copies are to be kept) must also be
specified. The arguments must be fully qualified path names, and may
include environment variables.


LIST name ...

This line enumerates a list of files and sub-directories (beneath
the current BASE) that are to be kept synchronized. This
specification is recursive, in that specifying the name of a
directory automatically includes all files and subdirectories it
contains. Regular expressions (as described in glob and gmatch) are
permitted. See glob(1) and gmatch(3GEN).


IGNORE name ...

This line enumerates a list of files that are not to be kept
synchronized. Regular expressions (using glob and gmatch) are
permitted.


There are important differences between the arguments to LIST and IGNORE
statements. The arguments to a LIST statement can contain slashes and are
interpreted as file names relative to the BASE directories. The
arguments to an IGNORE statement are simpler names or expressions that
cannot contain slashes. An IGNORE statement will not override a LIST
statement. IGNORE statements only exclude files that are found beneath
LISTed directories.


If the first name argument to a LIST statement begins with an
exclamation point (`!'), the remainder of the statement will be executed
as a command. The command will be run in the current BASE directory. The
output of the command will be treated as a list of newline separated
file names to be packed/synchronized. The resulting file names will be
interpreted relative to the enclosing BASE directory.


If the first name argument to an IGNORE statement begins with an
exclamation point (`!'), the remainder of the statement will be executed
as a command. The command will be run in the current BASE directory. The
command will be expected to figure out which names should not be
synchronized. The output of the command will be treated as a list of
newline separated file names that should be excluded from the packing and
synchronization list.


Commands will be broken into distinct arguments and run directly with sh
-c. Blanks can be embedded in an argument by escaping them with a
backslash (`\') or enclosing the argument in double quotes (` " ').
Double quotes can be passed in arguments by escaping the double quotes
with a backslash (`\').


LIST lines only apply to the BASE statement that precedes them. IGNORE
lines can appear before any BASE statement (in which case they apply to
all BASEs) or after a BASE statement (in which case they only apply to
the BASE that precedes them). Any number of these statements can occur
in any combination. The order is not important.

EXAMPLES


Example 1: A sample $HOME.packingrules file.




The use of these statements is illustrated in the following
$HOME.packingrules file.


#
# junk files, not worth copying
#
IGNORE core *.o *.bak *%
#
# most of the stuff I want to keep in sync is in my $HOME
#
BASE /net/bigserver/export/home/myname $HOME
# everything in my work sub-directory should be maintained
LIST work
# a few of my favorite mail boxes should be replicated
LIST m/incoming
LIST m/action
LIST m/pending
#
# I like to carry around a couple of project directories
# but skip all the postscript output
#
BASE /net/bigserver/export/projects $HOME/projects
LIST poindexter epiphany
IGNORE *.ps
#
# the foonly package should always be kept on every machine
#
BASE /net/bigserver/opt/foonly /opt/foonly
LIST !cat .packinglist
#
# and the latest executables for the standard build environment
#
BASE /net/bigserver/export/buildenv $HOME/buildenv
LIST !find . -type f -a -perm -111 -a -print


SEE ALSO


file(1), filesync(1)


September 8, 2015 PACKINGRULES(4)