DIFFSTAT(1) User commands DIFFSTAT(1)

diffstat - ایجاد نمودار فراوانی (هیستوگرام) از خروجی دستور diff

diffstat [گزینه‌ها] [مشخصات-فایل]

این برنامه خروجی diff را می‌خواند و یک هیستوگرام از سطر‌های اضافه‌شده، حذف‌شده و تغییر‌یافته را به تفکیک پرونده نمایش می‌دهد. ابزار Diffstat برای بررسی فایل‌های وصله (patch) بزرگ و پیچیده بسیار کارآمد است. این برنامه از یک یا چند پرونده ورودی حاوی خروجی diff می‌خواند و هیستوگرامی از کل سطرهای تغییر‌یافته برای هر پرونده ارجاع داده‌شده تولید می‌کند.

اگر نام پرونده ورودی به “.bz2”, “.gz”, “.lzma”, “.xz”, “.zst”, “.z” یا “.Z”, ختم شود، diffstat داده‌های غیرفشرده را از طریق لوله (pipe) از برنامه مربوطه می‌خواند. همچنین می‌تواند نوع فشرده‌سازی را از پرونده‌هایی که از طریق ورودی استاندارد ارسال می‌شوند تشخیص دهد.

ابزار Diffstat پرکاربردترین انواع خروجی diff را تشخیص می‌دهد:

نوع ترجیحی ابزار patch.
بهترین حالت برای خوانایی، اما نه چندان فشرده.
کاربرد چندانی ندارد، اما تولید آن ساده است.

ابزار Diffstat سطرهایی را که توسط diff خروجی داده شده‌اند برای تشخیص پرونده‌های مقایسه‌شده شناسایی می‌کند و سپس نشانگرهای ستون اول را که نوع تغییر (افزودن، حذف یا تغییر) را مشخص می‌کنند، می‌شمارد. این موارد در هیستوگرام با نویسه‌های "+"، "-" و "!" نمایش داده می‌شوند.

اگر هیچ نام فایلی در خط فرمان داده نشود، diffstat تفاوت‌ها را از ورودی استاندارد می‌خواند.

نادیده گرفتن خطوط مطابق با "Binary files XXX and YYY differ" در خروجی diff.
افزودن پیشوند "#" به ابتدای هر خط خروجی، که آن را به یک خط کامنت برای اسکریپت‌های پوسته تبدیل می‌کند.
افزودن توالی‌های گریز رنگی SGR برای برجسته‌سازی هیستوگرام.
مشخص کردن دایرکتوری حاوی پرونده‌هایی که می‌توانند به عنوان نتیجه اعمال تفاوت‌ها در نظر گرفته شوند. ابزار diffstat سطرهای موجود در پرونده‌های مربوطه را (پس از تطبیق نام‌ها توسط گزینه -p) می‌شمارد تا تعداد کل سطرهای هر پرونده را به دست آورد.
باقیمانده، پس از کسر سطرهای تغییریافته و حذف‌شده، به عنوان "سطرهای بدون تغییر" (unchanged lines) نمایش داده می‌شود.
حالت اشکال‌زدایی اطلاعات زیادی چاپ می‌کند. این حالت معمولاً به‌صورت کامپایل‌شده درون برنامه قرار دارد، اما می‌توان جلوی آن را گرفت.
هدایت خطای استاندارد به پرونده.
حذف توالی‌های گریز ANSI از هر خط پیش از تجزیه تفاوت‌ها. این امر به diffstat اجازه می‌دهد با colordiff استفاده شود.
مشخص کردن قالب هیستوگرام.
0
برای خروجی مختصر، که فقط مقدار و یک کد هیستوگرام برای هر یک از درج (+)، حذف (-) یا تغییر (!) را نشان می‌دهد.
1
برای خروجی عادی.
2
برای پر کردن هیستوگرام با نقطه.
4
برای چاپ هر مقدار در کنار هیستوگرام.
هر مقدار غیرصفر یک هیستوگرام تولید می‌کند. نقطه‌ها و مقادیر جداگانه می‌توانند با هم ترکیب شوند، برای نمونه -f6 هر دو را اعمال می‌کند.
نمایش پیام راهنما و خروج.
جلوگیری از ادغام نام پرونده‌ها در گزارش.
تلاش برای بهبود حاشیه‌نویسی پرونده‌های "only" با جستجوی مطابقت در مجموعه پرونده‌های حاصل و استنتاج این که پرونده اضافه یا حذف شده است.
این گزینه در حال حاضر در ترکیب با -R کار نمی‌کند زیرا diffstat فقط مجموعه پرونده‌های حاصل را نگه می‌دارد.
فقط فهرست کردن نام پرونده‌ها. هیچ هیستوگرامی تولید نمی‌شود.
ادغام شمارش درج/حذف از هر تکه (chunk) پرونده وصله برای تخمین تعداد سطرهای تغییر‌یافته.
تعیین حداقل عرض مورد استفاده برای نام پرونده‌ها. اگر این را مشخص نکنید، diffstat از طول طولانی‌ترین نام پرونده پس از حذف پیشوندهای مشترک استفاده می‌کند.
تعیین حداکثر عرض مورد استفاده برای نام پرونده‌ها. نام‌های طولانی‌تر از این حد از سمت چپ کوتاه می‌شوند. اگر این را مشخص نکنید، diffstat گزینه -n را بررسی می‌کند.
هدایت خروجی استاندارد به پرونده.
نادیده گرفتن منطقی که مسیرهای مشترک را حذف می‌کند، شبیه‌سازی گزینه "-p" در patch.
اگر گزینه -p را تعیین نکنید، diffstat تفاوت‌ها را بررسی کرده و پیشوند مشترک را از مسیرها حذف می‌کند. این رفتاری نیست که patch انجام می‌دهد.
صرف‌نظر کردن از پیام "0 files changed" برای diffهای خالی.
گرد کردن اختیاری داده‌های نمایش‌داده‌شده در هیستوگرام را به جای برش با تعدیل خطا فراهم می‌کند.
0
حالت پیش‌فرض است. هیچ گرد کردنی انجام نمی‌شود، اما خطاهای انباشته‌شده به ستون‌های بعدی افزوده می‌شوند.
1
داده‌ها را گرد می‌کند.
2
داده‌ها را گرد کرده و هیستوگرام را تنظیم می‌کند تا در صورت وجود هرگونه تفاوت مطمئن شود چیزی نمایش داده می‌شود، حتی اگر آن تفاوت‌ها در حالت عادی به صفر گرد شوند.
فرض می‌کند وصله با جابجایی فایل‌های قدیمی و جدید ایجاد شده است.
فقط نمایش خط خلاصه، مانند تعداد درج‌ها و حذف‌ها.
مشابه گزینه -D است، اما مکانی را مشخص می‌کند که پرونده‌های اصلی (پیش از اعمال تفاوت‌ها) در آن یافت می‌شوند.
جایگزین کردن هیستوگرام؛ خروجی مقادیر جداشده با کاما را برای تعداد سطرهای تغییریافته در تفاوت‌های هر پرونده تولید می‌کند: درج‌شده، حذف‌شده و تغییریافته.
اگر گزینه‌های -S یا -D داده شوند، تعداد سطرهای بدون تغییر پیش از تعداد تغییرات می‌آید.
چاپ اعدادی که گزینه -t نشان می‌داد، بین مسیر و هیستوگرام.
عرض تعداد تغییرات بر اساس بزرگ‌ترین مقدار تعیین می‌شود (حداقل ۳). عرض تعیین‌شده در گزینه -w جدا از عرض این اعداد است.
جلوگیری از مرتب‌سازی نام پرونده‌ها در گزارش.
نمایش پیشرفت کار؛ برای نمونه اگر خروجی به یک فایل هدایت شده باشد، پیام‌های پیشرفت را در خطای استاندارد می‌نویسد.
چاپ شماره نسخه فعلی و خروج.
تعیین حداکثر عرض هیستوگرام. هیستوگرام هرگز کوتاه‌تر از ۱۰ ستون نخواهد بود، تا در صورتی که نام پرونده‌ها بسیار بزرگ شدند مشکلی پیش نیاید.
عرض پیش‌فرض ۸۰ ستون است، مگر اینکه خروجی به ترمینال باشد. در آن صورت، عرض پیش‌فرض برابر با عرض ترمینال خواهد بود.

ابزار Diffstat در یک محیط سازگار با POSIX اجرا می‌شود.

می‌توانید مسیرهای داخلی برنامه‌های استفاده‌شده برای استخراج و غیرفشرده‌سازی پرونده‌های ورودی را با تنظیم متغیرهای محیطی متناظر تغییر دهید:

DIFFSTAT_BZCAT_PATH
DIFFSTAT_BZIP2_PATH
DIFFSTAT_COMPRESS_PATH
DIFFSTAT_GZIP_PATH
DIFFSTAT_LZCAT_PATH
DIFFSTAT_PCAT_PATH
DIFFSTAT_UNCOMPRESS_PATH
DIFFSTAT_XZ_PATH
DIFFSTAT_ZCAT_PATH
DIFFSTAT_ZSTD_PATH

با این حال، diffstat فرض می‌کند که برنامه حاصل از همان گزینه‌های خط فرمان استفاده می‌کند، مثلاً "-c" برای استخراج در خروجی استاندارد.

ابزار Diffstat یک ماژول باینری منفرد است که از هیچ پرونده کمکی استفاده نمی‌کند.

ابزار Diffstat فرضیات زیادی درباره قالب خروجی diff در نظر می‌گیرد.

هیچ راهی برای دریافت نام پرونده از خروجی استاندارد diff بین دو فایل بدون هیچ گزینه‌ای وجود ندارد. تفاوت‌های زمینه‌ای (Context diffs) و تفاوت‌های یکپارچه (unified diffs) به‌خوبی کار می‌کنند.

هیچ روش ساده‌ای برای تعیین میزان همپوشانی بین نمایش «قبل» و «بعد» خطوط تغییریافته وجود ندارد. برنامه diffstat صرفاً تعداد خطوط درج‌شده و حذف‌شده را می‌شمارد تا برای گزینه -m خطوط تغییریافته را تخمین بزند.

Thomas Dickey <dickey@invisible-island.net>.

diff(1), patch(1).

2026-04-14 1.69