cloc(1) User Commands cloc(1) نام (NAME) cloc - شمارش یا محاسبه تفاوت‌های خطوط کد منبع و کامنت‌ها خلاصه دستور (SYNOPSIS) cloc [options] ... توضیحات (DESCRIPTION) شمارش یا محاسبه تفاوت‌های خطوط فیزیکی کد منبع در فایل‌های داده‌شده (می‌تواند شامل آرشیوهایی مانند فایل‌های فشرده tarball یا zip، یا شناسه‌های هش کامیت گیت یا نام شاخه‌ها باشد) و/یا به صورت بازگشتی در زیرپوشه‌های مشخص‌شده. این برنامه کاملاً به زبان پرل و تنها با استفاده از ماژول‌های توزیع استاندارد آن نوشته شده است. گزینه‌ها (OPTIONS) گزینه‌های ورودی (Input Options) برای شمارش ورودی استاندارد، از نام فایل ویژه - و همراه با آن از --stdin-name=FILE برای اطلاع دادن نام فایل لوله‌کشی‌شده به cloc، یا --force-lang=LANG برای اعمال شمارنده LANG به تمام ورودی‌ها استفاده کنید. --extract-with=CMD این گزینه تنها زمانی نیاز است که cloc نتواند به تنهایی نحوه استخراج محتویات فایل(های) ورودی را تشخیص دهد. از CMD برای استخراج فایل‌های آرشیو باینری (مانند .tar.gz، .zip، .Z) استفاده کنید. از عبارت دقیق '>FILE<' به عنوان جایگزین فایل(های) واقعی که باید استخراج شوند استفاده نمایید. برای مثال، برای شمارش خطوط کد در فایل‌های ورودی gcc-4.2.tar.gz perl-5.8.8.tar.gz در یونیکس از دستور زیر استفاده کنید: --extract-with='gzip -dc >FILE< | tar xf - یا اگر از GNU tar استفاده می‌کنید: --extract-with='tar zxf >FILE<' و در ویندوز، برای مثال: --extract-with="\"c:\Program Files\WinZip\WinZip32.exe\" -e -o >FILE< --list-file=FILE فهرست نام فایل‌ها و/یا پوشه‌ها برای پردازش را از FILE دریافت می‌کند که در هر خط آن یک نام فایل/پوشه قرار دارد. تنها موارد منطبق دقیق شمرده می‌شوند؛ مسیرهای نسبی با مبدا پوشه‌ای که cloc در آن فراخوانی شده حل‌وفصل می‌شوند. برای خواندن نام فایل‌ها از لوله STDIN، مقدار FILE را برابر - قرار دهید. همچنین ببینید: --exclude-list-file، --config. --diff-list-file=FILE جفت‌های نام فایل برای مقایسه (diff) را از FILE می‌خواند که قالب آن مطابق با خروجی --diff-alignment است. (برای مشاهده نمونه، آن گزینه را اجرا کنید.) شناسه زبان در انتهای هر خط نادیده گرفته می‌شود. این کار حالت --diff را فعال کرده و منطق تراز کردن جفت فایل‌ها را دور می‌زند. همچنین ببینید: --config. --vcs=VCS یک فراخوانی سیستمی به VCS اجرا می‌کند تا فهرستی از فایل‌ها برای کار روی آن‌ها دریافت شود. اگر VCS برابر با 'git' باشد، دستور 'git ls-files' برای دریافت فهرست فایل‌ها و 'git submodule status' برای دریافت فهرست زیرماژول‌هایی که محتوایشان نادیده گرفته می‌شود فراخوانی خواهد شد. همچنین گزینه --git را ببینید که هش‌های کامیت و نام شاخه‌های گیت را می‌پذیرد. اگر VCS برابر با 'svn' باشد، دستور 'svn list -R' فراخوانی خواهد شد. مزیت اصلی این است که cloc فایل‌هایی را که به صراحت توسط ابزار کنترل نسخه مربوطه مستثنی شده‌اند (مانند موارد موجود در .gitignore یا دارای ویژگی svn:ignore) نادیده می‌گیرد. همچنین VCS می‌تواند هر دستور سیستمی دیگری باشد که فهرستی از فایل‌ها را تولید می‌کند. نکته: cloc باید در پوشه‌ای باشد که بتواند فایل‌های بازگردانده‌شده توسط VCS را بخواند. cloc فایل‌ها را از مخازن راه دور دانلود نمی‌کند. دستور 'svn list -R' ممکن است برای به دست آوردن نام فایل‌ها به یک مخزن راه دور ارجاع دهد (و بنابراین ممکن است به احراز هویت در مخزن راه دور نیاز داشته باشد)، اما خود فایل‌ها باید محلی باشند. تنظیم VCS روی 'auto' بر اساس وجود زیرپوشه .git یا .svn در زیر پوشه‌ای که cloc در آن فراخوانی شده، بین 'git' و 'svn' (یا هیچ‌کدام) انتخاب می‌کند. --unicode فایل‌های باینری را بررسی می‌کند تا ببیند آیا حاوی متن یونیکد گسترش‌یافته با کدگذاری اسکی هستند یا خیر. این کار باعث افت محسوس کارایی می‌شود. گزینه‌های پردازش (Processing Options) --autoconf شمارش فایل‌های .in (مشابه پردازش انجام‌شده توسط GNU autoconf) برای زبان‌های شناخته‌شده. همچنین گزینه --no-autogen را ببینید. --by-file گزارش نتایج به تفکیک هر فایل منبع پردازش‌شده. --by-file-by-lang گزارش نتایج برای هر فایل منبع علاوه بر گزارش به تفکیک زبان. --config FILE خواندن سوییچ‌های خط فرمان از FILE به جای مسیر پیش‌فرض ~/.config/cloc/options.txt. این فایل باید در هر خط شامل یک سوییچ به همراه آرگومان‌های آن (در صورت وجود) باشد. خطوط خالی و خطوطی که با '#' شروع می‌شوند نادیده گرفته می‌شوند. گزینه‌های مشخص‌شده در خط فرمان نسبت به موارد خوانده‌شده از فایل اولویت دارند. اگر همراه با هر یک از این سوییچ‌ها یک دایرکتوری نیز مشخص شده باشد: --list-file، --exclude-list-file، --read-lang-def، --force-lang-def، --diff-list-file و یک فایل پیکربندی در آن دایرکتوری وجود داشته باشد، آن فایل نسبت به ~/.config/cloc/options.txt اولویت خواهد داشت. --count-and-diff SET1 SET2 ابتدا شمارش مستقیم کد فایل(های) منبع SET1 و SET2 را به طور جداگانه انجام داده، سپس تفاوت (diff) بین آن‌ها را محاسبه می‌کند. ورودی‌ها می‌توانند جفت فایل، دایرکتوری یا آرشیو باشند. اگر --out یا --report-file مشخص شده باشد، سه فایل خروجی ایجاد می‌شود؛ یکی برای هر کدام از دو شمارش و دیگری برای تفاوت. همچنین گزینه‌های --diff، --diff-alignment، --diff-timeout، --ignore-case و --ignore-whitespace را ببینید. --diff SET1 SET2 محاسبه تفاوت‌های خطوط کد و کامنت‌ها بین فایل(های) منبع SET1 و SET2. ورودی‌ها می‌توانند جفت فایل، دایرکتوری یا آرشیو باشند. از --diff-alignment برای ایجاد فهرستی از جفت‌فایل‌های مقایسه‌شده استفاده کنید. همچنین گزینه‌های --count-and-diff، --diff-alignment، --diff-timeout، --ignore-case و --ignore-whitespace را ببینید. --diff-timeout N نادیده گرفتن فایل‌هایی که پردازش آن‌ها بیش از N ثانیه طول می‌کشد. مقدار پیش‌فرض 10 ثانیه است. تنظیم N روی 0 زمان نامحدود را در نظر می‌گیرد. (فایل‌های بزرگ با خطوط تکراری زیاد می‌توانند باعث شوند فراخوانی Algorithm::Diff::sdiff() ساعت‌ها طول بکشد.) --docstring-as-code ابزار cloc رشته‌های مستندات (docstrings) را کامنت تلقی می‌کند، اما این همیشه درست نیست زیرا رشته‌های مستندات هنگامی که در سمت راست یک انتساب یا به عنوان آرگومان تابع قرار می‌گیرند، نشان‌دهنده رشته‌های معمولی هستند. این سوییچ شمارش رشته‌های مستندات به عنوان کد را اجبار می‌کند. --follow-links [فقط یونیکس] دنبال کردن پیوندهای نمادین به دایرکتوری‌ها (پیوندهای نمادین به فایل‌ها همیشه دنبال می‌شوند). --force-lang=LANG[,EXT] پردازش تمامی فایل‌های دارای پسوند EXT با شمارنده زبان LANG. برای مثال، برای شمارش تمام فایل‌های .f با شمارنده Fortran 90 (که انتظار دارد پسوند فایل‌ها .f90 باشد) به جای شمارنده پیش‌فرض Fortran 77، از دستور زیر استفاده کنید: --force-lang="Fortran 90",f اگر EXT حذف شود، هر فایلی با شمارنده LANG شمرده خواهد شد. این گزینه می‌تواند چندین بار مشخص شود (اما این فقط زمانی مفید است که هر بار EXT مشخص گردد). همچنین گزینه‌های --script-lang و --lang-no-ext را ببینید. --force-lang-def=FILE بارگذاری فیلترهای پردازش زبان از FILE، و سپس استفاده از این فیلترها به جای فیلترهای داخلی. نکته: زبان‌هایی که به پسوند فایل یکسانی نگاشت می‌شوند (برای مثال: MATLAB/Objective-C/MUMPS؛ Pascal/PHP؛ Lisp/OpenCL؛ Lisp/Julia؛ Perl/Prolog) نادیده گرفته خواهند شد زیرا این موارد نیاز به پردازش‌های اضافی دارند که در فایل‌های تعریف زبان بیان نمی‌شوند. از --read-lang-def برای تعریف فیلترهای زبانی جدید بدون جایگزینی فیلترهای داخلی استفاده کنید (همچنین --write-lang-def و --write-lang-def-incl-dup را ببینید). --git اجبار به تفسیر ورودی‌ها به عنوان اهداف گیت (هش کامیت‌ها، نام شاخه‌ها و غیره) در صورتی که ابتدا به عنوان نام فایل یا دایرکتوری شناسایی نشوند. این گزینه در صورت تعیین شدن، منطق --vcs=git را بازنویسی می‌کند؛ به عبارت دیگر، --git فهرست فایل‌های خود را مستقیماً از گیت با استفاده از هش یا نام شاخه دریافت می‌کند و نه از 'git ls-files'. این گزینه می‌تواند با --diff برای مقایسه تفاوت خطوط بین کامیت‌های گیت، یا بین یک کامیت گیت و یک فایل، دایرکتوری یا آرشیو استفاده شود. از -v/--verbose برای مشاهده دستورات سیستمی گیت که cloc صادر می‌کند استفاده کنید. --git-diff-rel مشابه با --git --diff، یا فقط --diff اگر ورودی‌ها به عنوان اهداف گیت شناخته شوند. تنها فایل‌هایی که در یکی از کامیت‌ها تغییر کرده‌اند مقایسه می‌شوند. --git-diff-all راهبرد دوم مقایسه گیت (git diff): مقایسه تمامی فایل‌های موجود در مخزن بین دو کامیت. --ignore-whitespace نادیده گرفتن فاصله‌های خالی افقی هنگام مقایسه فایل‌ها با --diff. همچنین --ignore-case را ببینید. --ignore-case نادیده گرفتن تفاوت حروف کوچک و بزرگ در محتوای فایل‌ها؛ در نظر گرفتن حروف بزرگ و کوچک به عنوان معادل هنگام مقایسه فایل‌ها با --diff. همچنین --ignore-whitespace را ببینید. --ignore-case-ext نادیده گرفتن بزرگی و کوچکی حروف در پسوند نام فایل‌ها. این امر ممکن است در شمارش برخی زبان‌ها مشکل ایجاد کند (به طور خاص، .c و .C به C و C++ مرتبط هستند؛ این سوییچ باعث می‌شود فایل‌های .C در سیستم‌عامل‌های شبه‌یونیکس به عنوان C به جای C++ شمرده شوند). حساس نبودن نام فایل به حروف کوچک و بزرگ در ویندوز همیشه برقرار است. --ignore-regex نادیده گرفتن خطوطی در فایل‌های منبع که با عبارت منظم پرل ارائه‌شده برای زبان(های) داده‌شده تطابق دارند. این گزینه را می‌توان چندین بار مشخص کرد. نام زبان‌ها با کاما از هم جدا شده و پس از آن نویسه خط لوله (|) و عبارت منظم می‌آید. از * برای مطابقت با تمام زبان‌ها استفاده کنید. مثال‌ها: --ignore-regex='C,Java,C++|^\s*[{};]\s*$' --ignore-regex='*|DEBUG|TEST\s+ONLY' این فیلترها پس از حذف کامنت‌ها اعمال می‌شوند. برای ایجاد فایل‌های جدیدی که اعمال این فیلترها را نشان می‌دهند، از --strip-comments=EXT استفاده کنید. کاربرد اصلی نادیده گرفتن خطوطی است که تنها شامل آکولاد، کروشه یا علائم نگارشی هستند. --include-submodules هنگام استفاده از --vcs=git، فایل‌های موجود در زیرماژول‌های گیت را نیز شامل می‌کند. --lang-no-ext=LANG شمارش فایل‌های بدون پسوند با استفاده از شمارنده LANG. این گزینه منطق داخلی برای فایل‌های بدون پسوند را بازنویسی می‌کند (که در آن چنین فایل‌هایی با بررسی خط اول برای "#!" در برابر زبان‌های اسکریپت‌نویسی شناخته‌شده بررسی می‌شوند). همچنین گزینه‌های --force-lang و --script-lang را ببینید. --max-file-size=MB صرف‌نظر کردن از فایل‌های بزرگ‌تر از "MB" مگابایت هنگام پیمایش دایرکتوری‌ها. به طور پیش‌فرض، مقدار "MB" برابر ۱۰۰ است. حافظه مورد نیاز cloc تقریباً بیست برابر بزرگ‌تر از بزرگ‌ترین فایل است، بنابراین اجرای برنامه با فایل‌های بزرگ‌تر از ۱۰۰ مگابایت روی رایانه‌ای با کمتر از ۲ گیگابایت حافظه رم مشکل‌ساز خواهد شد. نکته: این بررسی روی فایل‌هایی که صریحاً به عنوان آرگومان خط فرمان داده شده‌اند اعمال نمی‌شود. --no-autogen[=list] نادیده گرفتن فایل‌های تولیدشده توسط سیستم‌های خودکار تولید کد مانند GNU autoconf. برای مشاهده فهرستی از این فایل‌ها (و سپس خروج)، برنامه را با --no-autogen list اجرا کنید. همچنین --autoconf را ببینید. --no-recurse شمارش فایل‌ها در دایرکتوری‌های داده‌شده بدون پیمایش بازگشتی در زیرپوشه‌ها. --only-count-files تنها شمارش تعداد فایل‌ها بر اساس زبان. تعداد خطوط خالی، کامنت‌ها و کد صفر خواهد بود. --original-dir تنها در ترکیب با --strip-comments مؤثر است. فایل‌های پیراسته‌شده (بدون کامنت) را در همان دایرکتوری فایل‌های اصلی می‌نویسد. --read-binary-files پردازش فایل‌های باینری علاوه بر فایل‌های متنی. این کار معمولاً ایده بدی است و تنها باید برای فایل‌های متنی حاوی داده‌های باینری تعبیه‌شده امتحان شود. --read-lang-def=FILE بارگذاری فیلترهای پردازش زبان جدید از FILE و ادغام آن‌ها با فیلترهایی که cloc از قبل می‌شناسد. اگر FILE زبانی را تعریف کند که cloc از قبل می‌شناسد، تعاریف خود cloc اولویت خواهند داشت. برای بازنویسی تعاریف cloc از --force-lang-def استفاده کنید (همچنین --write-lang-def را ببینید). --script-lang=LANG,S پردازش تمام فایل‌هایی که "S" را به عنوان زبان اسکریپت‌نویسی "#!" فراخوانی می‌کنند، با شمارنده زبان LANG. برای مثال، فایل‌هایی که با "#!/usr/local/bin/perl5.8.8" شروع می‌شوند، با استفاده از دستور زیر با شمارنده Perl شمرده خواهند شد: --script-lang=Perl,perl5.8.8 نام زبان به حروف کوچک و بزرگ حساس نیست اما نام فایل اجرایی زبان اسکریپتی، "S"، باید بزرگی و کوچکی حروف درستی داشته باشد. این گزینه می‌تواند چندین بار مشخص شود. همچنین --force-lang را ببینید. --sdir=DIR استفاده از DIR به عنوان دایرکتوری موقت (scratch) به جای اجازه دادن به File::Temp برای انتخاب مکان. فایل‌های نوشته‌شده در این مکان در پایان اجرا حذف نمی‌شوند (برخلاف File::Temp). --skip-leading=N[,ext] صرف‌نظر کردن از خط اول هر فایل. اگر فهرستی از پسوندها نیز با کاما جدا شده و ارائه شود، تنها از خطوط آن نوع فایل‌ها صرف‌نظر می‌شود. مثال: --skip-leading=10,cpp,h از ده خط اول فایل‌های *.cpp و *.h صرف‌نظر می‌کند. این قابلیت برای نادیده گرفتن متون تکراری و قالبی مفید است. --skip-uniqueness صرف‌نظر کردن از بررسی یکتایی فایل‌ها. این کار عملکرد را افزایش می‌دهد، اما در ازای شمارش چندباره فایل‌هایی با محتوای یکسان (در صورت وجود چنین فایل‌های تکراری). --stat برخی فایل‌سیستم‌ها (AFS، CD-ROM، FAT، HPFS، SMB) تعداد پیوند دایرکتوری ('nlink') متناسب با تعداد زیرپوشه‌های خود ندارند. در نتیجه ممکن است cloc محتویات چنین فایل‌سیستم‌هایی را کمتر از واقعیت بشمارد یا به طور کامل نادیده بگیرد. این سوییچ File::Find را وادار می‌کند تا با stat کردن دایرکتوری‌ها، تعداد صحیح را به دست آورد. سرعت جستجوی فایل کاهش خواهد یافت. همچنین --follow-links را ببینید. --stdin-name=FILE شمارش خطوط ارائه‌شده از طریق ورودی استاندارد (STDIN) به گونه‌ای که گویی از فایلی به نام FILE آمده‌اند. --strip-code=EXT به ازای هر فایل پردازش‌شده، نسخه‌ای از فایل را که خطوط خالی و کد آن حذف شده‌اند در دایرکتوری جاری می‌نویسد. نام هر فایل پیراسته‌شده، نام فایل اصلی به همراه ".EXT" در انتهای آن است. این فایل در دایرکتوری جاری نوشته می‌شود مگر اینکه گزینه --original-dir فعال باشد. --strip-comments=EXT به ازای هر فایل پردازش‌شده، نسخه‌ای از فایل را که خطوط خالی و کامنت آن حذف شده‌اند در دایرکتوری جاری می‌نویسد (کامنت‌های درون‌خطی باقی می‌مانند). نام هر فایل پیراسته‌شده، نام فایل اصلی به همراه ".EXT" در انتهای آن است. این فایل در دایرکتوری جاری نوشته می‌شود مگر اینکه گزینه --original-dir فعال باشد. --strip-str-comments جایگزینی نشانگرهای کامنت تعبیه‌شده در رشته‌ها با 'xx'. این گزینه تلاش می‌کند تا محدودیتی در Regexp::Common::Comment را برطرف کند که در آن نشانگرهای کامنت درون رشته‌ها به عنوان کامنت واقعی در نظر گرفته می‌شوند و نه رشته، که اغلب منجر به هشدار 'Complex regular subexpression recursion limit' و شمارش نادرست می‌شود. استفاده از این سوییچ دو عیب دارد: ۱. افت عملکرد شمارش کد، ۲. کدهای تولیدشده با --strip-comments در هر جایی که کامنت‌های تعبیه‌شده یافت شوند حاوی رشته‌های متفاوتی خواهند بود. --sum-reports آرگومان‌های ورودی فایل‌های گزارشی هستند که پیش‌تر با گزینه --report-file ایجاد شده‌اند. مجموعه‌ای تجمیعی از نتایج حاوی جمع داده‌های هر یک از فایل‌های گزارش تولید می‌کند. --timeout=N نادیده گرفتن فایل‌هایی که پردازش آن‌ها در هر یک از مراحل فیلتر زبان بیش از ثانیه طول می‌کشد. حداکثر زمان پیش‌فرض صرف‌شده برای یک مرحله فیلتر، تعداد خطوط فایل تقسیم بر ۱۰۰۰ است. تنظیم N روی 0 زمان نامحدود را در نظر می‌گیرد. همچنین --diff-timeout را ببینید. --processes=NUM [تنها در سیستم‌هایی با نسخه جدید ماژول Parallel::ForkManager در دسترس است. در ویندوز موجود نیست.] حداکثر تعداد هسته‌های پردازشی مورد استفاده cloc را تعیین می‌کند. مقدار پیش‌فرض 0 چندپردازشی را غیرفعال می‌کند. --unix نادیده گرفتن منطق تشخیص سیستم‌عامل و اجرا در حالت یونیکس (UNIX). همچنین گزینه‌های --windows و --show-os را ببینید. --use-sloccount اگر ابزار SLOCCount نصب باشد، از برنامه‌های اجرایی کامپایل‌شده آن یعنی c_count، java_count، pascal_count، php_count و xml_count به جای شمارنده‌های cloc استفاده می‌کند. شمارنده‌های کامپایل‌شده SLOCCount به طور قابل توجهی سریع‌تر از cloc هستند و ممکن است هنگام شمارش پروژه‌هایی با فایل‌های حجیم، بهبود کارایی ایجاد کنند. با این حال، قابلیت‌های ویژه cloc در دسترس نخواهند بود: --diff، --count-and-diff، --strip-comments، --unicode. --windows نادیده گرفتن منطق تشخیص سیستم‌عامل و اجرا در حالت مایکروسافت ویندوز. همچنین گزینه‌های --unix و --show-os را ببینید. گزینه‌های فیلتر (Filter Options) --include-content=REGEX تنها فایل‌هایی را می‌شمارد که حاوی متنی منطبق بر عبارت منظم داده‌شده باشند. --exclude-content=REGEX فایل‌هایی را که حاوی متنی منطبق بر عبارت منظم داده‌شده باشند مستثنی می‌کند. --exclude-dir=DIR1[,DIR2 ...] دایرکتوری‌های داده‌شده را که با کاما از هم جدا شده‌اند از پویش مستثنی می‌کند. برای مثال: --exclude-dir=.cache,test از تمام فایل‌هایی که مسیر آن‌ها شامل "/.cache/" یا "/test/" باشد صرف‌نظر می‌کند. دایرکتوری‌های به نام ".bzr"، ".cvs"، ".hg"، ".git" و ".svn" همیشه مستثنی هستند. این گزینه فقط با نام‌های تکی دایرکتوری کار می‌کند، بنابراین درج جداکننده‌های مسیر فایل مجاز نیست. از --fullpath و --not-match-d=REGEX برای ارائه یک عبارت منظم که با چندین زیرپوشه مطابقت داشته باشد استفاده کنید. --exclude-ext=EXT1[,EXT2 ...] فایل‌های دارای پسوندهای نام فایل مشخص‌شده را نمی‌شمارد. --exclude-lang=L1[,L2[...]] زبان‌های داده‌شده را که با کاما از هم جدا شده‌اند از شمارش مستثنی می‌کند. --exclude-list-file=FILE فایل‌ها و/یا دایرکتوری‌هایی را که نام آن‌ها در FILE آمده است نادیده می‌گیرد. FILE باید در هر خط حاوی یک نام فایل باشد. تنها موارد منطبق دقیق نادیده گرفته می‌شوند؛ مسیرهای نسبی با مبدا دایرکتوری فراخوانی cloc حل‌وفصل می‌شوند. همچنین گزینه‌های --list-file و --config را ببینید. --fullpath رفتار --match-f یا --not-match-f را تغییر می‌دهد تا مسیر فایل نیز در عبارت منظم گنجانده شود، نه فقط نام پایه (basename) فایل. (این گزینه هر فایل را به مسیر مطلق آن بسط نمی‌دهد، بلکه از همان مقداری از مسیر که به cloc ارسال شده استفاده می‌کند.) --include-ext= تنها زبان‌هایی را می‌شمارد که دارای پسوند فایل داده‌شده (جداشده با کاما) باشند. برای مشاهده پسوندهای شناخته‌شده از --show-ext استفاده کنید. --include-lang=L1[,L2 ...] تنها زبان‌های مشخص‌شده غیرحساس به حروف کوچک و بزرگ L1، L2، L3 و غیره را می‌شمارد. --match-d=REGEX تنها فایل‌های موجود در دایرکتوری‌هایی را می‌شمارد که با عبارت منظم پرل مطابقت دارند. برای مثال: --match-d='/(src|include)/' تنها فایل‌هایی را در مسیرهای دایرکتوری می‌شمارد که حاوی "/src/" یا "/include/" باشند. --not-match-d=REGEX تمام فایل‌ها را می‌شمارد به جز فایل‌های موجود در دایرکتوری‌هایی که با عبارت منظم پرل مطابقت دارند. تنها نام دایرکتوری انتهایی مقایسه می‌شود؛ به عنوان مثال هنگام شمارش در "/usr/local/lib"، تنها "lib" با عبارت منظم مقایسه می‌شود. گزینه --fullpath را اضافه کنید تا دایرکتوری‌های والد نیز با عبارت منظم مقایسه شوند. در ابتدا یا انتهای عبارت منظم جداکننده‌های مسیر فایل را قرار ندهید. این سوییچ می‌تواند تکرار شود. --match-f=REGEX تنها فایل‌هایی را می‌شمارد که نام پایه آن‌ها با عبارت منظم پرل مطابقت دارد. برای مثال دستور زیر تنها فایل‌هایی را می‌شمارد که با Widget یا widget شروع می‌شوند: --match-f='^[Ww]idget' گزینه --fullpath را اضافه کنید تا به جای فقط نام پایه، دایرکتوری‌های والد نیز در عبارت منظم لحاظ شوند. --not-match-f=REGEX تمام فایل‌ها به جز آن‌هایی که نام پایه آن‌ها با عبارت منظم پرل مطابقت دارد را می‌شمارد. گزینه --fullpath را اضافه کنید تا دایرکتوری‌های والد نیز در عبارت منظم لحاظ شوند. این سوییچ می‌تواند تکرار شود. --skip-archive=REGEX فایل‌هایی را که با عبارت منظم پرل داده‌شده پایان می‌یابند نادیده می‌گیرد. برای مثال، اگر داده شود: --skip-archive='(zip|tar(\.(gz|Z|bz2|xz|7z))?)' کد از فایل‌هایی که با .zip، .tar، .tar.gz، .tar.Z، .tar.bz2، .tar.xz و .tar.7z خاتمه می‌یابند صرف‌نظر می‌کند. --skip-win-hidden در ویندوز، فایل‌های پنهان را نادیده می‌گیرد. گزینه‌های اشکال‌زدایی (Debug Options) --categorized=FILE ذخیره اندازه فایل‌ها بر حسب بایت، زبان‌های شناسایی‌شده و نام فایل‌های دسته‌بندی‌شده در FILE. --counted=FILE ذخیره نام فایل‌های منبع پردازش‌شده در FILE. همچنین گزینه‌های --found، --ignored و --unique را ببینید. --diff-alignment=FILE نوشتن فهرستی از فایل‌ها و جفت‌فایل‌ها در FILE که نشان می‌دهد کدام فایل‌ها در حین اجرا با --diff اضافه، حذف و/یا مقایسه شده‌اند. این سوییچ حالت --diff را به اجبار فعال می‌کند. --explain=LANG چاپ فیلترهای استفاده‌شده برای حذف کامنت‌ها برای زبان LANG و سپس خروج. در برخی موارد فیلترها به جای عبارات منظم به سابروتین‌های پرل ارجاع دارند. برای توضیحات بیشتر ممکن است بررسی کد منبع لازم باشد. --help چاپ اطلاعات راهنمای داخلی استفاده از cloc و خروج. --found=FILE ذخیره نام تک‌تک فایل‌های یافت‌شده در FILE. همچنین گزینه‌های --counted، --ignored و --unique را ببینید. --ignored=FILE ذخیره نام فایل‌های نادیده‌گرفته‌شده و دلیل نادیده گرفتن آن‌ها در FILE. همچنین گزینه‌های --counted، --found و --unique را ببینید. --print-filter-stages چاپ کد منبع پردازش‌شده در STDOUT قبل و بعد از اعمال هر فیلتر. --show-ext[=EXT] چاپ اطلاعات مربوط به تمامی پسوندهای فایل شناخته‌شده (یا فقط پسوند داده‌شده) و خروج. --show-errors[=EXT] هنگام استفاده با --quiet، پیام‌های خطا (در صورت وجود) را چاپ می‌کند. --show-lang[=LANG] چاپ اطلاعات درباره تمام زبان‌های شناخته‌شده (یا فقط زبان داده‌شده) و خروج. --show-os چاپ مقدار حالت سیستم‌عامل و خروج. همچنین گزینه‌های --unix و --windows را ببینید. --quiet فرونشاندن تمام پیام‌های اطلاعاتی به جز خروجی نهایی. همچنین --show-errors را ببینید. --unique=FILE ذخیره نام فایل‌های نادیده‌گرفته‌شده و دلیل نادیده گرفتن آن‌ها در FILE. همچنین گزینه‌های --counted، --found و --ignored را ببینید. -v[=N] فعال‌سازی حالت پرگویی با مقدار عددی اختیاری. --verbose[=N] شکل بلند سوییچ -v. --version چاپ نسخه این برنامه و خروج. --write-lang-def=FILE نوشتن فیلترهای پردازش زبان در FILE و سپس خروج. به عنوان گام نخست برای ایجاد تعاریف زبان سفارشی مفید است. نکته: زبان‌هایی که به یک پسوند یکسان نگاشت می‌شوند مستثنی خواهند شد. همچنین گزینه‌های --force-lang-def و --read-lang-def را ببینید. --write-lang-def-incl-dup=FILE مشابه --write-lang-def، اما شامل پسوندهای تکراری نیز می‌شود. این کار یک فایل تعریف زبان مشکل‌دار ایجاد می‌کند زیرا cloc از استفاده از آن تا زمان حذف موارد تکراری خودداری خواهد کرد. گزینه‌های خروجی (Output Options) --3 چاپ خروجی زبان‌های نسل سوم. (این گزینه در صورت تولید برخی گزارش‌ها با این گزینه و برخی بدون آن، می‌تواند باعث عدم موفقیت در تجمیع گزارش‌ها شود.) --by-percent X نمایش مقادیر به صورت درصدی بر اساس مقدار X در مخرج به جای شمارش خطوط کامنت و خالی، که در آن X یکی از موارد زیر است: c به معنای خطوط کد cm به معنای خطوط کد + کامنت‌ها cb به معنای خطوط کد + خطوط خالی cmb به معنای خطوط کد + کامنت‌ها + خطوط خالی برای مثال، در صورت استفاده از روش 'c' و اگر کد شما دو برابر خطوط کد خطوط کامنت داشته باشد، مقدار ستون کامنت ۲۰۰٪ خواهد بود. ستون کد همچنان به صورت تعداد خط باقی می‌ماند. --csv نوشتن نتایج به صورت مقادیر جداشده با کاما (CSV). --csv-delimiter=C استفاده از نویسه C به عنوان جداکننده برای فایل‌های CSV به جای کاما (,). این سوییچ --csv را به اجبار فعال می‌کند. --file-encoding=E نوشتن فایل‌های خروجی با استفاده از کدگذاری E به جای اسکی پیش‌فرض (E = 'UTF-7'). مثال‌ها: 'UTF-16'، 'euc-kr'، 'iso-8859-16'. کدگذاری‌های شناخته‌شده را می‌توان با دستور زیر چاپ کرد: perl -MEncode -e 'print join("\n", Encode->encodings(":all")), "\n"' --fmt=N قالب متنی جایگزین خروجی که در آن N عددی از ۱ تا ۵ یا از ۱- تا ۵- است. عبارت 'total lines' به معنای مجموع خطوط کد، کامنت و خطوط خالی است. مقادیر منفی مشابه مقادیر مثبت هستند اما به جای حذف فایل واسط JSON نوشته‌شده، آن را نگه می‌دارند. نام فایل JSON به صورت تصادفی تولید می‌شود مگر اینکه --out/--report-file مشخص شده باشد. قالب‌ها عبارتند از: 1: بر اساس زبان (مشابه خروجی پیش‌فرض cloc) 2: بر اساس زبان با یک ستون اضافه برای کل خطوط 3: بر اساس فایل به همراه زبان 4: بر اساس فایل با ستون کل خطوط 5: بر اساس فایل به همراه زبان و ستون کل خطوط --hide-rate عدم نمایش نرخ پردازش خطوط و فایل‌ها در هدر خروجی. این کار خروجی را قطعی (deterministic) می‌کند. --json نوشتن نتایج در قالب نشانه‌گذاری شیء جاوااسکریپت (JSON). --md نوشتن نتایج به عنوان متن قالب‌بندی‌شده به زبان مارک‌داون (Markdown). --out=FILE هم‌معنی با --report-file=FILE. --progress-rate=N نمایش به‌روزرسانی پیشرفت پس از پردازش هر N فایل (پیش‌فرض N=100). تنظیم N روی 0 برای فرونشاندن خروجی پیشرفت؛ هنگام تغییر مسیر خروجی به STDOUT مفید است. --quiet فرونشاندن تمام پیام‌های اطلاعاتی به جز گزارش نهایی. --report-file=FILE نوشتن نتایج در FILE به جای خروجی استاندارد. --summary-cutoff=X:N تجمیع نتایجی که دارای خطوط X کمتر از N هستند در دسته 'Other' (سایر موارد)، که در آن X یکی از موارد زیر است: c به معنای خطوط کد f به معنای فایل‌ها m به معنای خطوط کامنت cm به معنای خطوط کد + کامنت‌ها افزودن علامت درصد به N، محاسبه را از شمارش مستقیم به درصد تغییر می‌دهد. همراه با --diff یا --by-file نادیده گرفته می‌شود. --sql=FILE نوشتن نتایج به صورت عبارات SQL CREATE و INSERT که توسط یک برنامه پایگاه‌داده مانند SQLite قابل خواندن باشد. اگر FILE برابر - باشد، خروجی به STDOUT ارسال می‌شود. --sql-append الحاق عبارات درج SQL (INSERT) به فایل مشخص‌شده با --sql و عدم تولید گزینه ایجاد جدول (CREATE TABLE). --sql-project=NAME استفاده از name به عنوان شناسه پروژه برای اجرای جاری. تنها همراه با گزینه --sql معتبر است. --sql-style=STYLE نوشتن عبارات SQL در سبک داده‌شده به جای فرمت پیش‌فرض SQLite. سبک‌ها شامل Oracle و Named_Columns هستند. --sum-one برای گزارش‌های متنی ساده، نمایش خط خروجی SUM: حتی اگر تنها یک فایل ورودی پردازش شده باشد. --xml نوشتن نتایج در قالب XML. --xsl[=FILE] ارجاع به FILE به عنوان شیوه‌نامه XSL درون خروجی XML. اگر FILE داده نشود، یک شیوه‌نامه پیش‌فرض به نام cloc.xsl می‌نویسد. این سوییچ --xml را به اجبار فعال می‌کند. --yaml نوشتن نتایج در قالب YAML. مثال‌ها (EXAMPLES) شمارش خطوط کد در یک فایل tar فشرده پرل 5.10.0 در سیستم‌عامل شبه‌یونیکس: cloc perl-5.10.0.tar.gz شمارش تغییرات در فایل‌ها، کد و کامنت‌ها بین نسخه‌های 2.6.6 و 2.7 پایتون: cloc --diff Python-2.6.6.tar.bz Python-2.7.tar.bz2 برای مشاهده چگونگی تراز کردن فایل‌ها توسط cloc جهت مقایسه بین دو پایگاه کد، از گزینه --diff-alignment=FILE استفاده کنید. در اینجا اطلاعات تراز در "align.txt" نوشته می‌شود: cloc --diff-alignment=align.txt gcc-4.4.0.tar.bz2 gcc-4.5.0.tar.bz2 شمارش تغییرات فایل، کد و کامنت بین دو کامیت گیت: cloc --git --diff b409850824 HEAD چاپ زبان‌های شناخته‌شده: cloc --show-lang حذف کامنت‌ها از "foo.c" و ذخیره نتیجه در "foo.c.nc" (پسوند "nc" دلخواه است؛ در اینجا برای نشان دادن "بدون کامنت" استفاده شده است): cloc --strip-comments=nc foo.c مثال‌های بیشتر را می‌توان در یافت. محیط (ENVIRONMENT) ندارد. فایل‌ها (FILES) ندارد. همچنین ببینید (SEE ALSO) sloccount(1) نویسندگان (AUTHORS) برنامه cloc توسط Al Danial نوشته شده است و حق نشر آن (C) 2006-2026 متعلق به است. این صفحه راهنما در ابتدا توسط Jari Aalto نوشته شده است. کد و مستندات هر دو تحت مجوز گنو جی‌پی‌ال (GNU GPL) نسخه ۲ یا (به انتخاب شما) هر نسخه جدیدتر منتشر شده‌اند. برای اطلاعات بیشتر در مورد مجوز، به نشانی مراجعه کنید. cloc 2026-02-04 cloc(1)