Find

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

برنامهٔ مرتبط دیگری به‌نام locate از `find` برای بروزرسانی پایگاه دادهٔ خود استفاده می‌کند.
دستور find با وجود کامل بودن دستوری زمان گیر است در مقابل دستور locate دستور سریعتری است.
که علت این سریع بودن در این است که بر اساس آپدیت‌های قبلی کار می‌کند و عیب آن نیز در همین است زیرا سیستم روزی
یکبار آپدیت می‌شود پس اگر به‌طور مثال فایلی را هم‌زمان ایجاد کردیم با این دستور نمی‌توانیم پیدا کنیم و باید ابتدا به صورت
دستی سیستم را آپدیت کنیم

## شکل استفاده

```bash
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]
```


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

حداقل یک مسیر باید تعریف شود. `find` می‌تواند نویسه‌های عام  را نیز تفسیر کند.

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

## نمونه‌ها
### در دایرکتوری فعلی

```bash
find . -name 'my*'
```


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

### فقط فایل‌ها

```bash
find . -name "my*" -type f
```


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

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


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


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

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

```bash
find / -type f -name "myfile" -print
```


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

رده:ابزارهای اس یو اس ۲۰۰۸ یونیکس
رده:برنامه‌های استاندارد یونیکس
رده:جستجو
رده:سامانه‌های بازیابی اطلاعات
رده:نرم‌افزارهای یونیکس