BFS(1) General Commands Manual BFS(1)

bfs - جستجوی سطح‌اول برای فایل‌های شما

bfs [پرچم‌ها...] [مسیرها...] [عبارت...]

پرچم‌ها (-H/-L/-P و غیره)، مسیرها، و عبارت‌ها را می‌توان آزادانه به هر ترتیبی ترکیب کرد.

bfs یک نسخه جستجوی سطح‌اول (breadth-first) از دستور یونیکس find(1) است.

bfs تقریباً از همه ویژگی‌های پیاده‌سازی‌های اصلی find(1) پشتیبانی می‌کند، بنابراین خطوط فرمان موجود شما باید همان‌طور که هستند کار کنند. همچنین برخی ویژگی‌های خاص خود را می‌افزاید، مانند یک تجزیه‌گر خط فرمان بخشنده‌تر و برخی گزینه‌های اضافی.

هر مسیر مشخص‌شده در خط فرمان به عنوان یک مسیر شروع برای جستجو در نظر گرفته می‌شود. اگر هیچ مسیری مشخص نشود، دایرکتوری فعلی (.) به‌طور پیش‌فرض جستجو می‌شود.

مانند find(1)، bfs آرگومان‌های خود را به عنوان یک عبارت بولی با اتصال کوتاه تفسیر می‌کند. به عنوان مثال،

bfs \( -name '*.txt' -or -lname '*.txt' \) -and -print

تمام مسیرهایی را چاپ می‌کند که یا فایل‌های .txt هستند یا پیوندهای نمادین به فایل‌های .txt می‌باشند. -and بین دو عبارت متوالی ضمنی فرض می‌شود، بنابراین این دستور نیز معادل است:

bfs \( -name '*.txt' -or -lname '*.txt' \) -print

در نهایت، اگر هیچ کنشی مشخص نشود، -print به‌طور ضمنی اعمال می‌شود، بنابراین این دستور نیز معادل است:

bfs -name '*.txt' -or -lname '*.txt'

بیشتر گزینه‌هایی که یک آرگومان عددی N می‌گیرند، -N یا +N را نیز می‌پذیرند. -N به معنی «کمتر از N»، و +N به معنی «بیشتر از N» است.

دنبال کردن پیوندهای نمادین مشخص‌شده در خط فرمان، اما نه در حین جستجو.
دنبال کردن تمام پیوندهای نمادین.
هرگز پیوندهای نمادین را دنبال نکند (پیش‌فرض).
استفاده از عبارت‌های منظم گسترش‌یافته (مشابه -regextype posix-extended).
فیلتر کردن فایل‌هایی با نام‌های ناامن برای xargs(1).
جستجو با ترتیب پس‌مرتبه (مشابه -depth).
پیمایش مدخل‌های دایرکتوری به ترتیب مرتب‌شده. مرتب‌سازی درون هر دایرکتوری به‌طور جداگانه انجام می‌شود، که آن را با bfs ... | sort متفاوت می‌سازد، اما همچنان یک ترتیب قطعی را فراهم می‌کند.
به نقاط پیوند دیگر وارد نشود (مشابه -xdev).
در نظر گرفتن PATH به عنوان مسیری برای جستجو (مفید در صورتی که با خط تیره شروع شود).
فعال کردن پرچم اشکال‌زدایی (به -D help مراجعه کنید).

-ON

فعال‌سازی سطح بهینه‌سازی N (پیش‌فرض: 3).
غیرفعال‌سازی تمام بهینه‌سازی‌ها.
ساده‌سازی‌های منطقی پایه.
تمام بهینه‌سازی‌های -O1، به همراه حذف کدهای مرده و تحلیل جریان داده.
تمام بهینه‌سازی‌های -O2، به همراه بازآرایی عبارت‌ها برای کاهش هزینه مورد انتظار.
-O4/-Ofast
تمام بهینه‌سازی‌ها، شامل بهینه‌سازی‌های تهاجمی که ممکن است رفتار مشاهده‌شده را در حالت‌های خاص تغییر دهد.

-S bfs|dfs|ids|eds

انتخاب راهبرد جستجو.
جستجوی سطح‌اول (پیش‌فرض).
جستجوی عمق‌اول. حافظه کمتری نسبت به جستجوی سطح‌اول مصرف می‌کند، اما معمولاً در بازگرداندن نتایج مرتبط کندتر است.
جستجوی عمق‌یابی تکراری. جستجوهای عمق‌اول مکرر را با محدودیت‌های عمق فزاینده انجام می‌دهد. این حالت نتایج را با ترتیبی مشابه جستجوی سطح‌اول، اما با مصرف حافظه کاهش‌یافته جستجوی عمق‌اول بازمی‌گرداند. در عمل تمایل به کندی زیاد دارد، بنابراین فقط در صورتی از آن استفاده کنید که حتماً به ترتیب سطح‌اول نیاز دارید اما -S bfs حافظه بسیار زیادی مصرف می‌کند.
جستجوی عمق‌یابی نمایی. مصالحه‌ای بین جستجوی سطح‌اول و عمق‌اول، که دامنه‌های عمق با افزایش نمایی را جستجو می‌کند (مانند 0-1، 1-2، 2-4، 4-8 و غیره). بسیاری از مزایای جستجوی سطح‌اول را با مصرف حافظه کمتر جستجوی عمق‌اول فراهم می‌کند. معمولاً بسیار سریع‌تر از -S ids است.
جستجو با N نخ به‌صورت موازی (پیش‌فرض: تعداد پردازنده‌ها، تا سقف 8).

( expression )
پرانتزها برای گروه‌بندی عبارت‌ها با یکدیگر استفاده می‌شوند. احتمالاً باید \( expression \) بنویسید تا از تفسیر پرانتزها توسط پوسته جلوگیری شود.

! expression
-not expression

عملگر «not»: نقیض مقدار درستی expression را برمی‌گرداند. ممکن است لازم باشد \! expression بنویسید تا از تفسیر ! توسط پوسته جلوگیری شود.

expression expression
expression -a expression
expression -and expression

عملگر «and» با اتصال کوتاه: اگر expression سمت چپ true باشد، expression سمت راست را برمی‌گرداند؛ در غیر این صورت، false را برمی‌گرداند.

expression -o expression
expression -or expression

عملگر «or» با اتصال کوتاه: اگر expression سمت چپ false باشد، expression سمت راست را برمی‌گرداند؛ در غیر این صورت، true را برمی‌گرداند.
عملگر «کاما»: expression سمت چپ را ارزیابی می‌کند اما نتیجه آن را نادیده می‌گیرد و expression سمت راست را برمی‌گرداند.

مستثنی کردن تمام مسیرهای منطبق با expression از جستجو. این قدرتمندتر از -prune است، زیرا حتی زمانی که عبارت به دلیل وجود -depth یا -mindepth ارزیابی نمی‌شود نیز اعمال می‌گردد. استثناها همیشه پیش از سایر عبارت‌ها اعمال می‌شوند، بنابراین قرار دادن آن‌ها در ابتدای خط فرمان کمترین ابهام را دارد.

-help
--help

چاپ اطلاعات نحوه استفاده و خروج فوری (بدون تجزیه بقیه خط فرمان یا پردازش هیچ فایلی).

-version
--version

چاپ اطلاعات نسخه و خروج فوری.

-color
-nocolor

فعال یا غیرفعال کردن رنگ‌ها (پیش‌فرض: -color در صورت خروجی به ترمینال، وگرنه -nocolor ).
محاسبه زمان نسبت به شروع امروز.
جستجو با ترتیب پس‌مرتبه (ابتدا فرزندان).
دنبال کردن تمام پیوندهای نمادین (مشابه -L).
در نظر گرفتن مسیرهای جداشده با NUL ('\0') در FILE به عنوان نقاط شروع جستجو. برای خواندن مسیرها از ورودی استاندارد، -files0-from - را ارسال کنید.

-ignore_readdir_race
-noignore_readdir_race

گزارش خطا در صورتی که bfs تشخیص دهد درخت فایل در طول جستجو تغییر یافته است یا خیر (پیش‌فرض: -noignore_readdir_race).

-maxdepth N
-mindepth N

نادیده گرفتن فایل‌های عمیق‌تر/کم‌عمق‌تر از N.
مستثنی کردن کامل نقاط پیوند از نتایج.
نادیده گرفتن هرگونه خطایی که در حین پیمایش رخ می‌دهد.
مستثنی کردن فایل‌ها و دایرکتوری‌های پنهان.
نادیده گرفته می‌شود؛ جهت سازگاری با GNU find.
استفاده از عبارت‌های منظم با سبک TYPE. انواع معتبر عبارتند از:
عبارت‌های منظم پایه‌ای POSIX (پیش‌فرض).
عبارت‌های منظم گسترش‌یافته POSIX.
مشابه ed(1) (مشابه posix-basic).
مشابه emacs(1).
مشابه grep(1).
مشابه sed(1) (مشابه posix-basic).

برای شرح ساختار عبارت منظم، به regex(7) مراجعه کنید.

نمایش نوار وضعیت در حین جستجو.
رد کردن فایل‌هایی که قبلاً دیده شده‌اند. به‌ویژه در کنار -L مفید است.

-warn
-nowarn

فعال یا غیرفعال کردن هشدارهای مربوط به خط فرمان.
به سایر نقاط پیوند وارد نشود. برخلاف -mount، خود نقطه پیوند همچنان گنجانده می‌شود.

یافتن فایل‌هایی با فهرست کنترل دسترسی (acl(5)) غیرجزئی.

-amin [-+]N
-Bmin [-+]N
-cmin [-+]N
-mmin [-+]N

یافتن فایل‌هایی که N دقیقه پیش accessed/Birthed/changed/modified (دسترسی‌یافته/ایجادشده/وضعیت‌تغییریافته/محتوا‌تغییریافته) شده‌اند.

-anewer FILE
-Bnewer FILE
-cnewer FILE
-mnewer FILE

یافتن فایل‌هایی که به تازگی‌تر از زمان تغییر FILE ، accessed/Birthed/changed/modified (دسترسی‌یافته/ایجادشده/وضعیت‌تغییریافته/محتوا‌تغییریافته) شده‌اند.

-asince TIME
-Bsince TIME
-csince TIME
-msince TIME

یافتن فایل‌هایی که به تازگی‌تر از برچسب زمانی با سبک ISO 8601 TIME، accessed/Birthed/changed/modified (دسترسی‌یافته/ایجادشده/وضعیت‌تغییریافته/محتوا‌تغییریافته) شده‌اند. برای مثال‌هایی از قالب برچسب زمانی، به -newerXY مراجعه کنید.

-atime [-+]N
-Btime [-+]N
-ctime [-+]N
-mtime [-+]N

یافتن فایل‌هایی که N روز پیش accessed/Birthed/changed/modified (دسترسی‌یافته/ایجادشده/وضعیت‌تغییریافته/محتوا‌تغییریافته) شده‌اند.
یافتن فایل‌هایی که قابلیت‌های capabilities(7) POSIX.1e روی آن‌ها تنظیم شده است.
یافتن فایل‌هایی که بافتار SELinux آن‌ها با GLOB تطابق دارد.
-depth [-+]N
یافتن فایل‌هایی با عمق N.
یافتن فایل‌ها/دایرکتوری‌های خالی.

-executable
-readable
-writable

یافتن فایل‌هایی که کاربر فعلی می‌تواند آن‌ها را اجرا کند/بخواند/بنویسد.

-false
-true

همیشه نادرست/درست (false/true).
یافتن فایل‌هایی با پرچم‌های inode منطبق بر FLAGS.
یافتن فایل‌های روی سیستم‌های فایلی با نوع TYPE.

-gid [-+]N
-uid [-+]N

یافتن فایل‌های متعلق به شناسه گروه/کاربر N.

-group NAME
-user NAME

یافتن فایل‌های متعلق به گروه/کاربر NAME.
یافتن فایل‌های پنهان (آن‌هایی که با . شروع می‌شوند).

-ilname GLOB
-iname GLOB
-ipath GLOB
-iregex REGEX
-iwholename GLOB

نسخه‌های غیرحساس به حروف بزرگ و کوچک از -lname/-name/-path/-regex/-wholename.
یافتن فایل‌هایی با شماره inode برابر N.
یافتن فایل‌هایی با N پیوند سخت.
یافتن پیوندهای نمادینی که مقصد آن‌ها با GLOB تطابق دارد.
یافتن فایل‌هایی که نام آن‌ها با GLOB تطابق دارد.
-newer FILE
یافتن فایل‌های تازه‌تر از FILE.
یافتن فایل‌هایی که زمان X آن‌ها تازه‌تر از زمان Y در REFERENCE است. X و Y می‌توانند هر یک از [aBcm] (access/Birth/change/modification) باشند. همچنین Y می‌تواند t باشد تا REFERENCE به عنوان یک برچسب زمانی به سبک ISO 8601 تجزیه شود. به عنوان مثال:
•  1991-12-14
•  1991-12-14T03:00
•  1991-12-14T03:00-07:00
• '1991-12-14 10:00Z'

-nogroup
-nouser

یافتن فایل‌های متعلق به گروه‌ها/کاربران ناموجود.

-path GLOB
-wholename GLOB

یافتن فایل‌هایی که کل مسیر آن‌ها با GLOB تطابق دارد.
یافتن فایل‌هایی با حالت مجوز منطبق.
یافتن فایل‌هایی که کل مسیر آن‌ها با عبارت منظم REGEX تطابق دارد.
یافتن پیوندهای سخت به FILE.
یافتن فایل‌های تغییریافته از زمان برچسب زمانی به سبک ISO 8601 TIME. برای مثال‌هایی از قالب برچسب زمانی، به -newerXY مراجعه کنید.
یافتن فایل‌هایی با اندازه مشخص‌شده. واحد می‌تواند یکی از موارد زیر باشد:
• chars  (1 بایت)
• words  (2 بایت)
• blocks (512 بایت، پیش‌فرض)
• kiB    (1024 بایت)
• MiB    (1024 کیبی‌بایت)
• GiB    (1024 میبی‌بایت)
• TiB    (1024 گیبی‌بایت)
• PiB    (1024 تبی‌بایت)
یافتن فایل‌هایی که بلوک‌های دیسک کمتری از حد انتظار اشغال کرده‌اند.
یافتن فایل‌های با نوع مشخص‌شده. انواع ممکن عبارتند از:
• دستگاه بلوکی (block)
• دستگاه نویسه‌ای (character)
• دایرکتوری (directory)
• پیوند نمادین (link)
• پایپ (pipe)
• فایل عادی (file)
• سوکت (socket)
• وایت‌اوت (whiteout)
• درگاه (Door)

چندین نوع را می‌توان همزمان و جداشده با کاما مشخص کرد. برای مثال، -type d,f هم با دایرکتوری‌ها و هم با فایل‌های عادی تطابق می‌یابد.

یافتن فایل‌هایی که آخرین دسترسی به آن‌ها N روز پس از آخرین تغییر وضعیت آن‌ها بوده است.
یافتن فایل‌هایی با ویژگی‌های گسترش‌یافته (xattr(7)).
یافتن فایل‌هایی با ویژگی گسترش‌یافته NAME.
یافتن فایل‌هایی با نوع مشخص‌شده، با دنبال کردن پیوندها زمانی که -type دنبال نمی‌کند، و بالعکس.

-delete
-rm

حذف فایل‌های یافت‌شده (مستلزم -depth).
اجرای یک دستور.
اجرای یک دستور با چندین فایل به‌طور همزمان.
پرسش از کاربر برای اجرای یک دستور.

-execdir command ... {} ;
-execdir command ... {} +
-okdir command ... {} ;

مانند -exec/-ok، اما اجرای دستور در همان دایرکتوری فایل(های) یافت‌شده انجام می‌شود.
خروج فوری با وضعیت مشخص‌شده (0 در صورت عدم تعیین).

-fls FILE
-fprint FILE
-fprint0 FILE
-fprintf FILE FORMAT

مشابه -ls/-print/-print0/-printf، اما نوشتن در FILE به جای خروجی استاندارد.
خروج پس از آنکه این کنش N بار ارزیابی شد.
فهرست کردن فایل‌ها مشابه ls -dils.
چاپ مسیر فایل یافت‌شده.
مشابه -print، اما استفاده از نویسه تهی ('\0') به جای خطوط جدید به عنوان جداکننده. در ترکیب با xargs -0 مفید است.
چاپ بر اساس یک رشته قالب‌بندی (به find(1) مراجعه کنید). این دستورالعمل‌های قالب‌بندی اضافی نیز پشتیبانی می‌شوند:
%w
زمان ایجاد فایل، با همان قالب %a/%c/%t.
%Wk
فیلد k از زمان ایجاد فایل، با همان قالب %Ak/%Ck/%Tk.
مشابه -print، اما گریز دادن نویسه‌های فاصله‌خالی و نقل‌قول برای ایمن‌سازی خروجی برای xargs(1). استفاده از -print0 و xargs -0 به جای آن را در نظر بگیرید.
به داخل این دایرکتوری وارد نشود. اگر -depth فعال باشد (چه صراحتاً یا به‌طور ضمنی توسط -delete) هیچ تاثیری ندارد. در این حالت به جای آن از -exclude استفاده کنید.
خروج فوری.

متغیرهای محیطی خاصی بر رفتار bfs اثر می‌گذارند.

LANG
LC_*

تعیین‌کننده locale(7) مورد استفاده برای موارد گوناگون. bfs هنوز به هیچ زبانی به جز انگلیسی ترجمه نشده است، اما محلی‌سازی همچنان بر قالب مقادیر چاپ‌شده اثر خواهد گذاشت. پیام‌های تایید بله/خیر (مانند خروجی از -ok) نیز بر اساس locale فعلی تفسیر خواهند شد.

LS_COLORS
BFS_COLORS

کنترل‌کننده رنگ‌های مورد استفاده هنگام نمایش مسیرهای فایل در صورت فعال بودن -color. دستور bfs متغیر LS_COLORS را مشابه ls(1) گنو تفسیر می‌کند (به dir_colors(5) مراجعه کنید). متغیر BFS_COLORS می‌تواند برای سفارشی‌سازی bfs بدون اثر گذاشتن بر سایر دستورات استفاده شود.
در صورت تنظیم بودن، باعث می‌شود bfs به‌طور پیش‌فرض از -nocolor استفاده کند (به https://no-color.org/ مراجعه کنید).
تعیین‌کننده صفحه‌بندی‌کننده (pager) مورد استفاده برای خروجی -help. پیش‌فرض آن less(1) است، در صورتی که در PATH فعلی یافت شود، در غیر این صورت more(1).
برای یافتن برنامه‌های اجرایی جهت -exec[dir] و -ok[dir] استفاده می‌شود.
باعث می‌شود bfs با استاندارد POSIX.1-2017 برای find(1) سازگاری دقیق‌تری داشته باشد. در حال حاضر این متغیر دو اثر دارد:
  • غیرفعال کردن هشدارها به‌طور پیش‌فرض، زیرا POSIX نوشتن در خطای استاندارد را ممنوع می‌کند (به جز اعلان‌های -ok)، مگر اینکه دستور با کد وضعیت غیرصفر پایان یابد.
  • باعث می‌شود -ls و -fls به جای بلوک‌های ۱۰۲۴ بایتی از بلوک‌های ۵۱۲ بایتی استفاده کنند. (POSIX این کنش‌ها را مشخص نمی‌کند، اما پیاده‌سازی‌های find(1) در BSD از بلوک‌های ۵۱۲ بایتی استفاده می‌کنند، در حالی که find(1) گنو به‌طور پیش‌فرض از بلوک‌های ۱۰۲۴ بایتی استفاده می‌کند.)

این متغیر الحاقات گوناگون bfs به قابلیت‌های پایه POSIX را غیرفعال نمی‌کند. POSIXLY_CORRECT همین اثرات را روی find(1) گنو نیز دارد.

بدون آرگومان، bfs تمام فایل‌های زیر دایرکتوری فعلی را با ترتیب سطح‌اول چاپ می‌کند.
bfs -name '*.txt'
تمام فایل‌های .txt زیر دایرکتوری فعلی را چاپ می‌کند. عبارت *.txt در گیومه قرار داده شده تا تضمین شود glob توسط bfs پردازش می‌شود و نه توسط پوسته.
bfs -name access_log -L /var
تمام فایل‌های با نام access_log را در زیر مسیر /var، با دنبال کردن پیوندهای نمادین پیدا می‌کند. bfs اجازه می‌دهد پرچم‌ها و مسیرها در هر کجای خط فرمان قرار گیرند.
bfs ~ -not -user $USER
تمام فایل‌های موجود در دایرکتوری خانگی شما که متعلق به شما نیستند را چاپ می‌کند.
bfs -xtype l
پیوندهای نمادین شکسته را پیدا می‌کند.
bfs -name config -exclude -name .git
تمام فایل‌های به نام config را پیدا کرده و از تمام دایرکتوری‌های .git صرف‌نظر می‌کند.
bfs -type f -executable -exec strip {} +
دستور strip(1) را روی تمام فایل‌های اجرایی یافته‌شده اجرا می‌کند و چندین فایل را همزمان به آن ارسال می‌نماید.

https://github.com/tavianator/bfs/issues

Tavian Barnes <tavianator@tavianator.com>

https://tavianator.com/projects/bfs.html

find(1), locate(1), xargs(1)

2026-06-29 bfs 4.1.4