bup-index(1)
π bup-index(1) β literally the index queen π
General Commands Manual Β· part of the bup(1) suite, bestie β¨
β¨ NAME β¨
bup-index β print and/or update the bup filesystem index π
π SYNOPSIS π
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] <paths...>
π¦ DESCRIPTION π¦
okay so bup index manipulates the filesystem index, which is basically a cache of absolute paths and their metadata (attributes, SHA-1 hashes, etc.). Think of it like git(1)'s index but for bup, and the default index lives at $BUP_DIR/bupindex. π
Making a backup in bup is a two-step slay:
- update the index with
bup index - actually back up the files (or a subset of them) with
bup save
and the reason it's split into two steps? bestie, we have reasons:
- There is more than one way to generate a list of files that need to be backed up. For example, you might want to use
inotify(7)ordnotify(7). - Even if you back up files to multiple destinations (for added redundancy), the file names, attributes, and hashes will be the same each time. Thus, you can save the trouble of repeatedly re-generating the list of files for each backup set.
- You may want to use the data tracked by
bup indexfor other purposes (such as speeding up other programs that need the same information).
π NOTES π
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. π
Previously bup would ignore Linux attributes (cf. chattr(1) and lsattr(1)) on big-endian systems where sizeof(long) < sizeof(int). This was because the Linux kernel and FUSE disagreed over the type of the attr system call arguments, (http://lwn.net/Articles/575846/). Since the kernel fixed the problem in 2020, bup now attempts to handle them everywhere, while still being careful not to corrupt the stack in the unlikely case the current system doesn't have the fix. π
π MODES π
-u,--updateβ recursively update the index for the given paths and their descendants. One or more paths must be specified, and if a path ends with a symbolic link, the link itself will be indexed, not the target (so the symlink gets the spotlight, not whoever it's pointing at, main character energy fr). If no mode option is given,--updateis the default, and paths may be excluded by the--exclude,--exclude-rx, and--one-file-systemoptions.-p,--printβ print the contents of the index. If paths are given, shows the given entries and their descendants. If no paths are given, shows the entries starting at the current working directory (.). β¨-m,--modifiedβ prints only files which are marked as modified (ie. changed since the most recent backup) in the index. Implies-p.-s,--statusβ prepend a status code (A,M,D, or space) before each path. 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. bye bye index π«Ά
π OPTIONS π
-H,--hashβ for each file printed, prepend the most recently recorded hash code. The hash code is normally generated bybup save. For objects which have not yet been backed up, the hash code will be0000000000000000000000000000000000000000. Note that the hash code is printed even if the file is known to be modified or deleted in the index (ie. the file on the filesystem no longer matches the recorded hash). If this is a problem for you, use--status.-l,--longβ print more information about each file, in a similar format to the-loption tols(1).-x,--xdev,--one-file-systemβ don't cross filesystem boundaries when traversing the filesystem β though as withtarandrsync, the mount points themselves will still be indexed. Only applicable if you're using-u.--fake-validβ mark specified paths as up-to-date even if they aren't. This can be useful for testing, or to avoid unnecessarily backing up files that you know are boring. π--fake-invalidβ mark specified paths as not up-to-date, forcing the nextbup saverun to re-check their contents.-f,--indexfile=indexfileβ use a different index filename instead of$BUP_DIR/bupindex.--exclude=pathβ exclude path from the backup (may be repeated).--exclude-from=filenameβ readβexcludepaths 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
--exclude-rx-from=filenameβ readβexclude-rxpatterns from filename, one pattern per-line (may be repeated). Ignore completely empty lines.--no-check-deviceβ don't mark an entry invalid if the device number (stat(2)st_dev) changes. This can be useful when indexing remote, automounted, or snapshot filesystems (LVM, Btrfs, etc.), where the device number isn't fixed.-v,--verboseβ increase log output during update (can be used more than once). With one-v, print each directory as it is updated; with two-v, print each file too. π£οΈ
πΈ EXAMPLES πΈ
bup index -vux /etc /var /usr
π§ SEE ALSO π§
bup-save(1), bup-drecurse(1), bup-on(1)
β BUP β
Part of the bup(1) suite.
π AUTHORS π
Avery Pennarun apenwarr@gmail.com
this was Bup 0.34, dated 2026-09-01 β ok that's the whole page bestie, go forth and index slay π β¨π
π¦ where this page comes from
- fedora 44: bup 0.34-1.fc44 Β· LGPL-2.0-only
- nixpkgs unstable: bup 0.34
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms