| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- .\" 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
- ..
- .TH "BORG-DIFF" "1" "2025-10-31" "" "borg backup tool"
- .SH NAME
- borg-diff \- Diff contents of two archives
- .SH SYNOPSIS
- .sp
- borg [common options] diff [options] REPO::ARCHIVE1 ARCHIVE2 [PATH...]
- .SH DESCRIPTION
- .sp
- This command finds differences (file contents, user/group/mode) between archives.
- .sp
- A repository location and an archive name must be specified for REPO::ARCHIVE1.
- ARCHIVE2 is just another archive name in the same repository (no repository location
- allowed).
- .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
- .sp
- Only actual changes are included in the \(dqchanges\(dq list. For example, a modified entry with
- added=0 and removed=0 is omitted.
- .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
- .sp
- The \fB\-\-sort\fP option is deprecated and only sorts by path.
- .SS Performance considerations
- .sp
- For archives created with Borg 1.1 or newer, diff automatically detects whether
- the archives were created with the same chunker parameters. If so, only chunk IDs
- are compared, which is very fast.
- .sp
- For archives prior to Borg 1.1, chunk contents are compared by default.
- If you did not create the archives with different chunker parameters,
- pass \fB\-\-same\-chunker\-params\fP\&.
- Note that the chunker parameters changed from Borg 0.xx to 1.0.
- .sp
- For more help on include/exclude patterns, see the \fIborg_patterns\fP command output.
- .SH OPTIONS
- .sp
- See \fIborg\-common(1)\fP for common options of Borg commands.
- .SS arguments
- .INDENT 0.0
- .TP
- .B REPO::ARCHIVE1
- repository location and ARCHIVE1 name
- .TP
- .B ARCHIVE2
- ARCHIVE2 name (no repository location allowed)
- .TP
- .B PATH
- paths of items inside the archives to compare; patterns are supported
- .UNINDENT
- .SS options
- .INDENT 0.0
- .TP
- .B \-\-numeric\-owner
- deprecated, use \fB\-\-numeric\-ids\fP instead
- .TP
- .B \-\-numeric\-ids
- only consider numeric user and group identifiers
- .TP
- .B \-\-same\-chunker\-params
- Override check of chunker parameters.
- .TP
- .B \-\-sort
- Sort the output by path (deprecated, use \-\-sort\-by=path).
- .UNINDENT
- .IP "System Message: WARNING/2 (docs/borg-diff.rst:, line 119)"
- Option list ends without a blank line; unexpected unindent.
- .sp
- \-\-sort\-by FIELD[,FIELD...] Advanced sorting: specify field(s) to sort by. Accepts a comma\-separated list. Prefix with > for descending or < for ascending (default).
- \-\-content\-only Only compare differences in content (exclude metadata differences)
- \-\-json\-lines Format output as JSON Lines.
- .SS Include/Exclude options
- .INDENT 0.0
- .TP
- .BI \-e \ PATTERN\fR,\fB \ \-\-exclude \ PATTERN
- exclude paths matching PATTERN
- .TP
- .BI \-\-exclude\-from \ EXCLUDEFILE
- read exclude patterns from EXCLUDEFILE, one per line
- .TP
- .BI \-\-pattern \ PATTERN
- include/exclude paths matching PATTERN
- .TP
- .BI \-\-patterns\-from \ PATTERNFILE
- read include/exclude patterns from PATTERNFILE, one per line
- .UNINDENT
- .SH EXAMPLES
- .INDENT 0.0
- .INDENT 3.5
- .sp
- .EX
- $ borg init \-e=none testrepo
- $ mkdir testdir
- $ cd testdir
- $ echo asdf > file1
- $ dd if=/dev/urandom bs=1M count=4 > file2
- $ touch file3
- $ borg create ../testrepo::archive1 .
- $ chmod a+x file1
- $ echo \(dqsomething\(dq >> file2
- $ borg create ../testrepo::archive2 .
- $ echo \(dqtesting 123\(dq >> file1
- $ rm file3
- $ touch file4
- $ borg create ../testrepo::archive3 .
- $ cd ..
- $ borg diff testrepo::archive1 archive2
- [\-rw\-r\-\-r\-\- \-> \-rwxr\-xr\-x] file1
- +135 B \-252 B file2
- $ borg diff testrepo::archive2 archive3
- +17 B \-5 B file1
- added 0 B file4
- removed 0 B file3
- $ borg diff testrepo::archive1 archive3
- +17 B \-5 B [\-rw\-r\-\-r\-\- \-> \-rwxr\-xr\-x] file1
- +135 B \-252 B file2
- added 0 B file4
- removed 0 B file3
- $ borg diff \-\-json\-lines testrepo::archive1 archive3
- {\(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}]}
- # 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 testrepo::archive1 archive3
- +17 B \-5 B [\-rw\-r\-\-r\-\- \-> \-rwxr\-xr\-x] file1
- removed 0 B file3
- added 0 B file4
- +135 B \-252 B file2
- .EE
- .UNINDENT
- .UNINDENT
- .SH SEE ALSO
- .sp
- \fIborg\-common(1)\fP
- .SH AUTHOR
- The Borg Collective
- .\" Generated by docutils manpage writer.
- .
|