پرش به محتوا

find

از ویکی‌پدیا، دانشنامهٔ آزاد

در سیستم‌عاملهای شبه‌یونیکس و دیگر سیستم‌عامل‌ها، find ابزاری خط فرمانی برای جستجو بدنبال فایل‌ها در میان دایرکتوری‌های موجود در سیستم‌فایل است. این جستجو بر اساس معیارها و ضوابطی است که کاربر تعیین می‌کند. معیارهایی مانند الگوی نام فایل‌ها و تاریخ ویرایش یا دسترسی فایل‌ها. به صورت پیش‌فرض find لیستی از فایل‌های موجود در دایرکتوری کاری را بر می‌گرداند. این دستور از طریق محیط shell اجرا شده و به شما کمک می‌کند فایل‌ها بر اساس دسته بندی‌های زیر جستجو نمایید. بر اساس نوع، اعم از پوشه و یا فایل بر اساس نام که می‌تواند حتی بخشی از نام فایل باشد براساس زمان و تاریخ براساس سطوح دسترسی براساس سایز براساس محتویات

برنامهٔ مرتبط دیگری به‌نام locate از find برای بروزرسانی پایگاه دادهٔ خود استفاده می‌کند. دستور find با وجود کامل بودن دستوری زمان گیر است در مقابل دستور locate دستور سریعتری است. که علت این سریع بودن در این است که بر اساس آپدیت‌های قبلی کار می‌کند و عیب آن نیز در همین است زیرا سیستم روزی یکبار آپدیت می‌شود پس اگر به‌طور مثال فایلی را هم‌زمان ایجاد کردیم با این دستور نمی‌توانیم پیدا کنیم و باید ابتدا به صورت دستی سیستم را آپدیت کنیم[۱]</nowiki></ref>

شکل استفاده

[ویرایش]
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

سه گزینهٔ اول مشخص می‌کند که find چطور باید با symbolic linkها رفتار کند. رفتار پیش‌فرض اینطور است که هیچ‌وقت symbolic linkها دنبال نشوند. همچنین می‌توان این حالت را صراحتاً توسط گزینهٔ P- مشخص نمود. گزینهٔ L- برای مواقعی استفاده می‌شود که قصد داشته باشیم symbolic linkها توسط find دنبال شوند.

حداقل یک مسیر باید تعریف شود. find می‌تواند نویسه‌های عام (به انگلیسی: Wildcard character) را نیز تفسیر کند.

عبارات (به انگلیسی: Expression) نیز باید توسط کارکتر فاصله از هم جدا شوند و از چپ به راست ارزیابی می‌شوند. همچنین می‌توانند شامل اعمال منطقی AND و OR باشند که می‌توان توسط آن‌ها عبارات پیچیده‌تری را پدیدآورد. (a- و o- بترتیب برای AND و OR کردن) همچنین نسخهٔ گنوی find دارای تعداد بسیار زیادی ویژگی دیگر است که در پازیکس تعریف نشده‌اند.

نمونه‌ها

[ویرایش]

در دایرکتوری فعلی

[ویرایش]
find . -name 'my*'

با این دستور find در دایرکتوری فعلی و شاخه‌های زیرین آن فایل یا دایرکتوریهایی را جستجو می‌کند که با my شروع می‌شوند. کارکترهای نقل‌قول (به انگلیسی: quote) برای این استفاده شده‌اند که تداخلی با مفسر خط فرمان رخ ندهد. بدون این کارکترها، مفسر خط فرمان عبارت *my را با لیست فایل‌هایی که با my شروع می‌شوند و در دایرکتوری فعلی موجود هستند، جایگزین می‌کند.

فقط فایل‌ها

[ویرایش]
find . -name "my*" -type f

دستور بالا، نتایج جستجو را فقط محدود به فایل‌های واقعی می‌کند؛ بنابراین دایرکتوری‌ها، فایل‌های خاص، لوله‌ها (به انگلیسی: pipe)، لینک‌ها و غیره از قلم می‌افتند و find آن‌ها را نادیده می‌گیرد.

فرمان‌ها

[ویرایش]

عمل پیش‌فرضی که find با نتایج جستجو انجام می‌دهد print- است، یعنی فقط نمایش آن‌ها در خروجی. (توجه داشته باشید که نسخه‌های جدید find هیچ عمل پیش‌فرضی انجام نمی‌دهند) ولی می‌توان هر فرمان دیگری را جایگزین عمل پیش‌فرض نمود.

find . -name "my*" -type f -ls

دستور بالا با استفاده از ls اطلاعات بیشتری در مورد فایل‌های یافته شده نمایش می‌دهد.

جستجو در تمام دایرکتوری‌ها

[ویرایش]
find / -type f -name "myfile" -print

این دستور تمام دایرکتوری‌های سیستم را بدنبال فایلی بنام myfile جستجو می‌کند و در صورت یافتن آن، در خروجی چاپ می‌کند. البته معمولاً این روش جستجو برای یک فایل ایدهٔ خوبی نیست. چون ممکن است برای مدت زمان قابل توجهی طول بکشد. پس بهتر است دایرکتوری مورد جستجو به صورت جزئی‌تر مشخص شود.

  1. McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (Technical report). CSTR. Bell Labs. 139.<nowiki>