# SYNOPSIS
-bup index \<-p|-m|-s|-u\> [-H] [-l] [-x] [\--fake-valid]
-[\--fake-invalid] [\--check] [-f *indexfile*] [\--exclude *path*]
-[\--exclude-from *filename*] [-v] \<filenames...\>
+bup index \<-p|-m|-s|-u|\--clear|\--check\> [-H] [-l] [-x] [\--fake-valid]
+[\--no-check-device] [\--fake-invalid] [-f *indexfile*] [\--exclude *path*]
+[\--exclude-from *filename*] [\--exclude-rx *pattern*]
+[\--exclude-rx-from *filename*] [-v] \<filenames...\>
# DESCRIPTION
which is a cache of the filenames, attributes, and sha-1
hashes of each file and directory in the filesystem. The
bup index is similar in function to the `git`(1) index, and
-can be found in `~/.bup/bupindex`.
+can be found in `$BUP_DIR/bupindex`.
Creating a backup in bup consists of two steps: updating
the index with `bup index`, then actually backing up the
other purposes (such as speeding up other programs that
need the same information).
+# NOTES
+
+At the moment, bup will ignore Linux attributes (cf. chattr(1) and
+lsattr(1)) on some systems (any big-endian systems where sizeof(long)
+< sizeof(int)). This is because the Linux kernel and FUSE currently
+disagree over the type of the attr system call arguments, and so on
+big-endian systems there's no way to get the results without the risk
+of stack corruption (http://lwn.net/Articles/575846/). In these
+situations, bup will print a warning the first time Linux attrs are
+relevant during any index/save/restore operation.
+
+bup makes accommodations for the expected "worst-case" filesystem
+timestamp resolution -- currently one second; examples include VFAT,
+ext2, ext3, small ext4, etc. Since bup cannot know the filesystem
+timestamp resolution, and could be traversing multiple filesystems
+during any given run, it always assumes that the resolution may be no
+better than one second.
+
+As a practical matter, this means that index updates are a bit
+imprecise, and so `bup save` may occasionally record filesystem
+changes that you didn't expect. That's because, during an index
+update, if bup encounters a path whose actual timestamps are more
+recent than one second before the update started, bup will set the
+index timestamps for that path (mtime and ctime) to exactly one second
+before the run, -- effectively capping those values.
+
+This ensures that no subsequent changes to those paths can result in
+timestamps that are identical to those in the index. If that were
+possible, bup could overlook the modifications.
+
+You can see the effect of this behavior in this example (assume that
+less than one second elapses between the initial file creation and
+first index run):
+
+ $ touch src/1 src/2
+ # A "sleep 1" here would avoid the unexpected save.
+ $ bup index src
+ $ bup save -n src src # Saves 1 and 2.
+ $ date > src/1
+ $ bup index src
+ $ date > src/2 # Not indexed.
+ $ bup save -n src src # But src/2 is saved anyway.
+
+Strictly speaking, bup should not notice the change to src/2, but it
+does, due to the accommodations described above.
# MODES
filename. Implies `-p`. The codes mean, respectively,
that a file is marked in the index as added, modified,
deleted, or unchanged since the last backup.
-
+
+\--check
+: carefully check index file integrity before and after
+ updating. Mostly useful for automated tests.
+
+\--clear
+: clear the default index.
+
# OPTIONS
format to the `-l` option to `ls`(1).
-x, \--xdev, \--one-file-system
-: don't cross filesystem boundaries when recursing
- through the filesystem. Only applicable if you're
- using `-u`.
+: don't cross filesystem boundaries when recursing through the
+ filesystem -- though as with tar and rsync, the mount points
+ themselves will still be indexed. Only applicable if you're using
+ `-u`.
\--fake-valid
: mark specified filenames as up-to-date even if they
\--fake-invalid
: mark specified filenames as not up-to-date, forcing the
next "bup save" run to re-check their contents.
-
-\--check
-: carefully check index file integrity before and after
- updating. Mostly useful for automated tests.
-f, \--indexfile=*indexfile*
: use a different index filename instead of
- `~/.bup/bupindex`.
+ `$BUP_DIR/bupindex`.
\--exclude=*path*
-: a path to exclude from the backup (can be used more
- than once)
+: exclude *path* from the backup (may be repeated).
\--exclude-from=*filename*
-: a file that contains exclude paths (can be used more
- than once)
+: read --exclude paths from *filename*, one path per-line (may be
+ repeated). Ignore completely empty lines.
+
+\--exclude-rx=*pattern*
+: exclude any path matching *pattern*, which must be a Python regular
+ expression (http://docs.python.org/library/re.html). The pattern
+ will be compared against the full path, without anchoring, so
+ "x/y" will match "ox/yard" or "box/yards". To exclude the
+ contents of /tmp, but not the directory itself, use
+ "^/tmp/.". (may be repeated)
+
+ Examples:
+
+ * '/foo$' - exclude any file named foo
+ * '/foo/$' - exclude any directory named foo
+ * '/foo/.' - exclude the content of any directory named foo
+ * '^/tmp/.' - exclude root-level /tmp's content, but not /tmp itself
+
+\--exclude-rx-from=*filename*
+: read --exclude-rx patterns from *filename*, one pattern per-line
+ (may be repeated). Ignore completely empty lines.
+
+\--no-check-device
+: don't mark a an entry invalid if the device number (stat(2)
+ st_dev) changes. This can be useful when indexing remote,
+ automounted, or (LVM) snapshot filesystems.
-v, \--verbose
: increase log output during update (can be used more
is updated; with two `-v`, print each file too.
-# EXAMPLE
-
+# EXAMPLES
bup index -vux /etc /var /usr