borgbackup/docs/man/borg-diff.1

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

271 lines
7.5 KiB
Groff
Raw Permalink Normal View History

2017-02-05 08:22:06 -05:00
.\" Man page generated from reStructuredText.
.
.
.nr rst2man-indent-level 0
.
.de1 rstReportMargin
\\$1 \\n[an-margin]
level \\n[rst2man-indent-level]
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
-
\\n[rst2man-indent0]
\\n[rst2man-indent1]
\\n[rst2man-indent2]
..
.de1 INDENT
.\" .rstReportMargin pre:
. RS \\$1
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
. nr rst2man-indent-level +1
.\" .rstReportMargin post:
..
.de UNINDENT
. RE
.\" indent \\n[an-margin]
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
.nr rst2man-indent-level -1
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
2025-12-23 12:00:09 -05:00
.TH "BORG-DIFF" "1" "2025-12-23" "" "borg backup tool"
2022-06-23 19:19:19 -04:00
.SH NAME
2025-12-23 12:00:09 -05:00
borg-diff \- Finds differences between two archives.
2017-02-05 08:22:06 -05:00
.SH SYNOPSIS
.sp
2022-06-23 19:19:19 -04:00
borg [common options] diff [options] ARCHIVE1 ARCHIVE2 [PATH...]
2017-02-05 08:22:06 -05:00
.SH DESCRIPTION
.sp
2023-06-11 17:10:23 -04:00
This command finds differences (file contents, metadata) between ARCHIVE1 and ARCHIVE2.
2017-02-05 08:22:06 -05:00
.sp
2025-12-23 12:00:09 -05:00
For more help on include/exclude patterns, see the output of the \fIborg_patterns\fP command.
2017-02-05 08:22:06 -05:00
.SH OPTIONS
.sp
See \fIborg\-common(1)\fP for common options of Borg commands.
.SS arguments
.INDENT 0.0
.TP
2022-06-23 19:19:19 -04:00
.B ARCHIVE1
ARCHIVE1 name
2017-02-05 08:22:06 -05:00
.TP
.B ARCHIVE2
2022-06-23 19:19:19 -04:00
ARCHIVE2 name
2017-02-05 08:22:06 -05:00
.TP
.B PATH
2025-12-23 12:00:09 -05:00
paths of items inside the archives to compare; patterns are supported.
2017-02-05 08:22:06 -05:00
.UNINDENT
2025-04-21 15:07:46 -04:00
.SS options
2017-02-05 08:22:06 -05:00
.INDENT 0.0
.TP
2022-06-23 19:19:19 -04:00
.B \-\-numeric\-ids
2017-02-05 08:22:06 -05:00
only consider numeric user and group identifiers
.TP
2022-06-23 19:19:19 -04:00
.B \-\-same\-chunker\-params
2025-12-23 12:00:09 -05:00
override the check of chunker parameters
2021-05-11 16:33:28 -04:00
.TP
2023-06-11 17:10:23 -04:00
.BI \-\-format \ FORMAT
specify format for differences between archives (default: \(dq{change} {path}{NL}\(dq)
.TP
2022-06-23 19:19:19 -04:00
.B \-\-json\-lines
2021-05-11 16:33:28 -04:00
Format output as JSON Lines.
2023-06-11 17:10:23 -04:00
.TP
2025-12-23 12:00:09 -05:00
.B \-\-sort\-by
Sort output by comma\-separated fields (e.g., \(aq>size_added,path\(aq).
.TP
2023-06-11 17:10:23 -04:00
.B \-\-content\-only
Only compare differences in content (exclude metadata differences)
2017-02-05 08:22:06 -05:00
.UNINDENT
2023-06-11 17:10:23 -04:00
.SS Include/Exclude options
2017-03-26 19:58:19 -04:00
.INDENT 0.0
.TP
2020-10-04 14:33:08 -04:00
.BI \-e \ PATTERN\fR,\fB \ \-\-exclude \ PATTERN
2017-03-26 19:58:19 -04:00
exclude paths matching PATTERN
.TP
.BI \-\-exclude\-from \ EXCLUDEFILE
read exclude patterns from EXCLUDEFILE, one per line
.TP
.BI \-\-pattern \ PATTERN
2022-02-05 11:30:40 -05:00
include/exclude paths matching PATTERN
2017-03-26 19:58:19 -04:00
.TP
.BI \-\-patterns\-from \ PATTERNFILE
2022-02-05 11:30:40 -05:00
read include/exclude patterns from PATTERNFILE, one per line
2017-03-26 19:58:19 -04:00
.UNINDENT
2017-02-05 08:22:06 -05:00
.SH EXAMPLES
.INDENT 0.0
.INDENT 3.5
.sp
2025-04-21 15:07:46 -04:00
.EX
2022-06-23 19:19:19 -04:00
$ borg diff archive1 archive2
2021-05-11 16:33:28 -04:00
+17 B \-5 B [\-rw\-r\-\-r\-\- \-> \-rwxr\-xr\-x] file1
2017-02-05 08:22:06 -05:00
+135 B \-252 B file2
added 0 B file4
removed 0 B file3
2021-05-11 16:33:28 -04:00
2022-06-23 19:19:19 -04:00
$ borg diff archive1 archive2
2022-09-10 10:03:27 -04:00
{\(dqpath\(dq: \(dqfile1\(dq, \(dqchanges\(dq: [{\(dqtype\(dq: \(dqmodified\(dq, \(dqadded\(dq: 17, \(dqremoved\(dq: 5}, {\(dqtype\(dq: \(dqmode\(dq, \(dqold_mode\(dq: \(dq\-rw\-r\-\-r\-\-\(dq, \(dqnew_mode\(dq: \(dq\-rwxr\-xr\-x\(dq}]}
{\(dqpath\(dq: \(dqfile2\(dq, \(dqchanges\(dq: [{\(dqtype\(dq: \(dqmodified\(dq, \(dqadded\(dq: 135, \(dqremoved\(dq: 252}]}
{\(dqpath\(dq: \(dqfile4\(dq, \(dqchanges\(dq: [{\(dqtype\(dq: \(dqadded\(dq, \(dqsize\(dq: 0}]}
{\(dqpath\(dq: \(dqfile3\(dq, \(dqchanges\(dq: [{\(dqtype\(dq: \(dqremoved\(dq, \(dqsize\(dq: 0}]}
2025-12-23 12:00:09 -05:00
# Use \-\-sort\-by with a comma\-separated list; sorts apply stably from last to first.
# Here: primary by net size change descending, tie\-breaker by path ascending
$ borg diff \-\-sort\-by=\(dq>size_diff,path\(dq archive1 archive2
+17 B \-5 B [\-rw\-r\-\-r\-\- \-> \-rwxr\-xr\-x] file1
removed 0 B file3
added 0 B file4
+135 B \-252 B file2
2025-04-21 15:07:46 -04:00
.EE
2017-02-05 08:22:06 -05:00
.UNINDENT
.UNINDENT
2023-06-11 17:10:23 -04:00
.SH NOTES
.SS The FORMAT specifier syntax
.sp
2025-12-23 12:00:09 -05:00
The \fB\-\-format\fP option uses Python\(aqs format string syntax <https://docs.python.org/3.10/library/string.html#formatstrings>
2025-04-21 15:07:46 -04:00
\&.
2023-06-11 17:10:23 -04:00
.sp
Examples:
.INDENT 0.0
.INDENT 3.5
.sp
2025-04-21 15:07:46 -04:00
.EX
2023-06-11 17:10:23 -04:00
$ borg diff \-\-format \(aq{content:30} {path}{NL}\(aq ArchiveFoo ArchiveBar
modified: +4.1 kB \-1.0 kB file\-diff
\&...
# {VAR:<NUMBER} \- pad to NUMBER columns left\-aligned.
# {VAR:>NUMBER} \- pad to NUMBER columns right\-aligned.
$ borg diff \-\-format \(aq{content:>30} {path}{NL}\(aq ArchiveFoo ArchiveBar
modified: +4.1 kB \-1.0 kB file\-diff
\&...
2025-04-21 15:07:46 -04:00
.EE
2023-06-11 17:10:23 -04:00
.UNINDENT
.UNINDENT
.sp
The following keys are always available:
.INDENT 0.0
.IP \(bu 2
NEWLINE: OS dependent line separator
.IP \(bu 2
NL: alias of NEWLINE
.IP \(bu 2
NUL: NUL character for creating print0 / xargs \-0 like output
.IP \(bu 2
SPACE: space character
.IP \(bu 2
TAB: tab character
.IP \(bu 2
CR: carriage return character
.IP \(bu 2
LF: line feed character
.UNINDENT
.sp
Keys available only when showing differences between archives:
.INDENT 0.0
.IP \(bu 2
path: archived file path
.IP \(bu 2
change: all available changes
.IP \(bu 2
content: file content change
.IP \(bu 2
mode: file mode change
.IP \(bu 2
type: file type change
.IP \(bu 2
owner: file owner (user/group) change
.IP \(bu 2
group: file group change
.IP \(bu 2
user: file user change
.IP \(bu 2
link: file link change
.IP \(bu 2
directory: file directory change
.IP \(bu 2
blkdev: file block device change
.IP \(bu 2
chrdev: file character device change
.IP \(bu 2
fifo: file fifo change
.IP \(bu 2
mtime: file modification time change
.IP \(bu 2
ctime: file change time change
.IP \(bu 2
isomtime: file modification time change (ISO 8601)
.IP \(bu 2
isoctime: file creation time change (ISO 8601)
.UNINDENT
2025-12-23 12:00:09 -05:00
.SS What is compared
.sp
For each matching item in both archives, Borg reports:
.INDENT 0.0
.IP \(bu 2
Content changes: total added/removed bytes within files. If chunker parameters are comparable,
Borg compares chunk IDs quickly; otherwise, it compares the content.
.IP \(bu 2
Metadata changes: user, group, mode, and other metadata shown inline, like
\(dq[old_mode \-> new_mode]\(dq for mode changes. Use \fB\-\-content\-only\fP to suppress metadata changes.
.IP \(bu 2
Added/removed items: printed as \(dqadded SIZE path\(dq or \(dqremoved SIZE path\(dq.
.UNINDENT
.SS Output formats
.sp
The default (text) output shows one line per changed path, e.g.:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
+135 B \-252 B [ \-rw\-r\-\-r\-\- \-> \-rwxr\-xr\-x ] path/to/file
.EE
.UNINDENT
.UNINDENT
.sp
JSON Lines output (\fB\-\-json\-lines\fP) prints one JSON object per changed path, e.g.:
.INDENT 0.0
.INDENT 3.5
.sp
.EX
{\(dqpath\(dq: \(dqPATH\(dq, \(dqchanges\(dq: [
{\(dqtype\(dq: \(dqmodified\(dq, \(dqadded\(dq: BYTES, \(dqremoved\(dq: BYTES},
{\(dqtype\(dq: \(dqmode\(dq, \(dqold_mode\(dq: \(dq\-rw\-r\-\-r\-\-\(dq, \(dqnew_mode\(dq: \(dq\-rwxr\-xr\-x\(dq},
{\(dqtype\(dq: \(dqadded\(dq, \(dqsize\(dq: SIZE},
{\(dqtype\(dq: \(dqremoved\(dq, \(dqsize\(dq: SIZE}
]}
.EE
.UNINDENT
.UNINDENT
.SS Sorting
.sp
Use \fB\-\-sort\-by FIELDS\fP where FIELDS is a comma\-separated list of fields.
Sorts are applied stably from last to first in the given list. Prepend \(dq>\(dq for
descending, \(dq<\(dq (or no prefix) for ascending, for example \fB\-\-sort\-by=\(dq>size_added,path\(dq\fP\&.
Supported fields include:
.INDENT 0.0
.IP \(bu 2
path: the item path
.IP \(bu 2
size_added: total bytes added for the item content
.IP \(bu 2
size_removed: total bytes removed for the item content
.IP \(bu 2
size_diff: size_added \- size_removed (net content change)
.IP \(bu 2
size: size of the item as stored in ARCHIVE2 (0 for removed items)
.IP \(bu 2
user, group, uid, gid, ctime, mtime: taken from the item state in ARCHIVE2 when present
.IP \(bu 2
ctime_diff, mtime_diff: timestamp difference (ARCHIVE2 \- ARCHIVE1)
.UNINDENT
.SS Performance considerations
.sp
diff automatically detects whether the archives were created with the same chunker
parameters. If so, only chunk IDs are compared, which is very fast.
2017-02-05 08:22:06 -05:00
.SH SEE ALSO
.sp
\fIborg\-common(1)\fP
.SH AUTHOR
The Borg Collective
.\" Generated by docutils manpage writer.
.