| borg-diff(1) | borg backup tool | borg-diff(1) |
نام (NAME)
borg-diff - مقایسه تفاوتهای دو بایگانی در Borg
خلاصه دستور (SYNOPSIS)
borg [common options] diff [options] REPO::ARCHIVE1 ARCHIVE2 [PATH...]
توضیحات (DESCRIPTION)
این دستور تفاوتها (محتوای پرونده، کاربر/گروه/دسترسی) بین بایگانیها را مییابد.
یک مکان مخزن و یک نام بایگانی باید برای REPO::ARCHIVE1 مشخص شود. ARCHIVE2 فقط نام یک بایگانی دیگر در همان مخزن است (تعیین مکان مخزن مجاز نیست).
موارد مورد مقایسه (What is compared)
برای هر مورد منطبق در هر دو بایگانی، Borg گزارش میدهد:
- تغییرات محتوا: مجموع بایتهای افزوده/حذف شده در پروندهها. اگر پارامترهای تکهساز (chunker) قابل مقایسه باشند، Borg شناسههای تکهها (chunk IDs) را بهسرعت مقایسه میکند؛ در غیر این صورت، محتوا را مقایسه میکند.
- تغییرات متادیتا: کاربر، گروه، دسترسی و سایر فرادادهها بهصورت درونخطی مانند "[old_mode -> new_mode]" برای تغییرات دسترسی نمایش داده میشوند. برای جلوگیری از نمایش تغییرات متادیتا از --content-only استفاده کنید.
- موارد افزوده/حذف شده: بهصورت "added SIZE path" یا "removed SIZE path" چاپ میشوند.
قالبهای خروجی (Output formats)
خروجی پیشفرض (متنی) یک خط برای هر مسیر تغییریافته نمایش میدهد، مانند:
+135 B -252 B [ -rw-r--r-- -> -rwxr-xr-x ] path/to/file
خروجی خطوط JSON با گزینه (--json-lines) یک شیء JSON برای هر مسیر تغییریافته چاپ میکند، مانند:
{"path": "PATH", "changes": [
{"type": "modified", "added": BYTES, "removed": BYTES},
{"type": "mode", "old_mode": "-rw-r--r--", "new_mode": "-rwxr-xr-x"},
{"type": "added", "size": SIZE},
{"type": "removed", "size": SIZE}
]}
تنها تغییرات واقعی در فهرست "changes" گنجانده میشوند. برای مثال، یک مدخل تغییریافته با added=0 و removed=0 نادیده گرفته میشود.
مرتبسازی (Sorting)
از --sort-by FIELDS استفاده کنید که در آن FIELDS فهرستی از فیلدها است که با کاما از هم جدا شدهاند. مرتبسازیها بهصورت پایدار از آخرین به اولین مورد در فهرست دادهشده اعمال میشوند. برای نزولی پیشوند ">" و برای صعودی "<" (یا بدون پیشوند) را اضافه کنید، برای مثال --sort-by=">size_added,path". فیلدهای پشتیبانیشده عبارتند از:
- path: مسیر مورد
- size_added: کل بایتهای افزوده شده برای محتوای مورد
- size_removed: کل بایتهای حذف شده برای محتوای مورد
- size_diff: size_added - size_removed (تغییر خالص محتوا)
- size: اندازه مورد ذخیرهشده در ARCHIVE2 (۰ برای موارد حذف شده)
- user, group, uid, gid, ctime, mtime: در صورت وجود، از وضعیت مورد در ARCHIVE2 گرفته میشوند
- ctime_diff, mtime_diff: اختلاف برچسب زمان (archive2 - archive1)
گزینه --sort منسوخ شده است و تنها بر اساس مسیر مرتبسازی میکند.
ملاحظات عملکرد (Performance considerations)
برای بایگانیهای ایجاد شده با Borg 1.1 یا جدیدتر، diff بهطور خودکار تشخیص میدهد که آیا بایگانیها با پارامترهای تکهساز (chunker) یکسان ایجاد شدهاند یا خیر. اگر چنین باشد، تنها شناسههای تکه مقایسه میشوند که بسیار سریع است.
برای بایگانیهای پیش از Borg 1.1، محتوای تکهها بهطور پیشفرض مقایسه میشود. اگر بایگانیها را با پارامترهای تکهساز متفاوتی ایجاد نکردهاید، --same-chunker-params را پاس دهید. توجه داشته باشید که پارامترهای تکهساز از Borg 0.xx به 1.0 تغییر کردهاند.
برای راهنمایی بیشتر درباره الگوهای گنجاندن/مستثنی کردن، خروجی دستور borg_patterns را ببینید.
گزینهها (OPTIONS)
برای گزینههای مشترک دستورات Borg به borg-common(1) مراجعه کنید.
آرگومانها (arguments)
- REPO::ARCHIVE1
- مکان مخزن و نام ARCHIVE1
- ARCHIVE2
- نام ARCHIVE2 (تعیین مکان مخزن مجاز نیست)
- PATH
- مسیر موارد درون بایگانیها برای مقایسه؛ از الگوها پشتیبانی میشود
گزینهها (options)
- --numeric-owner
- منسوخ شده است، بهجای آن از --numeric-ids استفاده کنید
- --numeric-ids
- تنها شناسههای عددی کاربر و گروه در نظر گرفته شوند
- --same-chunker-params
- صرفنظر کردن از بررسی پارامترهای تکهساز.
- --sort
- مرتبسازی خروجی بر اساس مسیر (منسوخ شده، از --sort-by=path استفاده کنید).
- --sort-by FIELDS
- مرتبسازی پیشرفته: تعیین فیلد(ها) برای مرتبسازی. یک فهرست جداشده با کاما را میپذیرد. برای نزولی با > یا برای صعودی (پیشفرض) با < پیشوندگذاری کنید.
- --content-only
- تنها مقایسه تفاوتها در محتوا (صرفنظر کردن از تفاوتهای متادیتا)
- --json-lines
- قالببندی خروجی بهصورت خطوط JSON.
گزینههای گنجاندن/استثنا کردن (Include/Exclude options)
- -e PATTERN, --exclude PATTERN
- مستثنی کردن مسیرهای منطبق با PATTERN
- --exclude-from EXCLUDEFILE
- خواندن الگوهای استثنا از EXCLUDEFILE، یک الگو در هر خط
- --pattern PATTERN
- گنجاندن/مستثنی کردن مسیرهای منطبق با PATTERN
- --patterns-from PATTERNFILE
- خواندن الگوهای گنجاندن/استثنا از PATTERNFILE، یک الگو در هر خط
مثالها (EXAMPLES)
$ 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 "something" >> file2
$ borg create ../testrepo::archive2 .
$ echo "testing 123" >> 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
{"path": "file1", "changes": [{"type": "modified", "added": 17, "removed": 5}, {"type": "mode", "old_mode": "-rw-r--r--", "new_mode": "-rwxr-xr-x"}]}
{"path": "file2", "changes": [{"type": "modified", "added": 135, "removed": 252}]}
{"path": "file4", "changes": [{"type": "added", "size": 0}]}
{"path": "file3", "changes": [{"type": "removed", "size": 0}]}
# استفاده از --sort-by با یک فهرست جداشده با کاما؛ مرتبسازیها بهصورت پایدار از آخر به اول اعمال میشوند.
# در اینجا: اولویت اصلی با تغییر خالص اندازه بهصورت نزولی، برای موارد برابر بر اساس مسیر بهصورت صعودی
$ borg diff --sort-by=">size_diff,path" 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
همچنین ببینید (SEE ALSO)
نویسندگان (AUTHORS)
The Borg Collective
| 2026-07-18 |