
به اشتراک بگذارید
آموزش سرور | بلاگ وبداده
آموزش دستور Find در لینوکس؛ جستجوی حرفهای فایلها
- کار اصلی: پیمایش زنده و دقیق فایلسیستم برای یافتن فایلها با دهها شرط مختلف.
- پرکاربردترین فیلترها: -name/-iname برای نام، -type برای نوع، -size برای حجم و -mtime برای زمان.
- اجرا روی نتایج: با -exec یا xargs میتوانید فایلهای یافتهشده را فشرده، جابهجا یا حذف کنید.
- هشدار کلیدی: گزینه -delete برگشتناپذیر است؛ همیشه اول بدون آن جستجو کنید.
- find یا locate؟ find همیشه بهروز اما کندتر است؛ locate سریع اما وابسته به پایگاهدادهای است که شاید قدیمی باشد.
ساختار کلی
find [مسیر] [شرطها] [اکشن]. اگر مسیری ندهید، از پوشه فعلی شروع میشود. مثلاً find . -name "*.log" یعنی «در پوشه جاری و زیرشاخهها، هر فایلی که نامش به log. ختم میشود را پیدا کن». همین الگوی ساده، پایه تمام مثالهای پیشرفته است.دستور find لینوکس چیست و چگونه کار میکند؟
# سینتکس کلی: find [مسیر] [شرطها] [اکشن]
find /var/www -name "*.php" # جستجوی فایل php (حساس به حروف بزرگ/کوچک)
find . -iname "readme*" # ناحساس به حروف بزرگ/کوچک
find /home -type d -name "cache" # فقط دایرکتوریهایی به نام cacheBashنکته
* در الگوها همان wildcard پوسته است؛ برای جلوگیری از تفسیر زودهنگام آن توسط شل، الگو را داخل گیومه بگذارید.
جستجوی فایل با شرطهای مختلف؛ مثالهای کاربردی
۱) جستجو بر اساس نام و نوع فایل
-iname "readme*" هم readme و هم README را مییابد. با -type هم میتوانید نتیجه را به فایل عادی (f)، دایرکتوری (d) یا لینک نمادین (l) محدود کنید.۲) جستجو بر اساس حجم و زمان
# فایلهای بزرگتر از ۱۰۰ مگابایت (یافتن مصرفکنندههای فضا)
find /var -type f -size +100M
# فایلهای تغییریافته در ۷ روز اخیر
find /var/log -type f -mtime -7
# فایلهای قدیمیتر از ۳۰ روز
find /backup -type f -mtime +30Bashنکته کاربردی
۳) ترکیب شرطها و جستجوی پیشرفته

جدول مرجع مهمترین گزینههای find
| گزینه | کار آن | مثال |
|---|---|---|
| -name / -iname | جستجو بر اساس نام (حساس / ناحساس به حروف) | -iname “*.jpg” |
| -type | محدودکردن به نوع (f فایل، d پوشه، l لینک) | -type d |
| -size | فیلتر بر اساس حجم (k، M، G) | -size +100M |
| -mtime / -mmin | زمان تغییر بر حسب روز / دقیقه | -mtime -7 |
| -user / -group | مالک یا گروه فایل | -user www-data |
| -perm | مجوز دسترسی فایل | -perm 0777 |
| -maxdepth | محدودکردن عمق جستجو | -maxdepth 2 |
| -exec / -delete | اجرای دستور روی نتایج / حذف آنها | -exec rm {} + |
جمعبندی جدول
اجرا روی نتایج، حذف امن و عیبیابی خطاهای رایج
اجرا با -exec در برابر xargs
# علامت \; یعنی یک اجرا بهازای هر فایل
find . -name "*.tmp" -exec rm {} \;
# علامت + همه نتایج را یکجا به دستور میدهد (سریعتر)
find . -name "*.log" -exec gzip {} +
# ترکیب امن با xargs برای نامهای دارای فاصله (و ۴ پردازش موازی)
find . -name "*.jpg" -print0 | xargs -0 -P4 jpegoptimBashحذف فایلها با -delete (با احتیاط)
# گام ۱: اول فقط جستجو کن و خروجی را وارسی کن
find /tmp -type f -name "*.cache" -mtime +14
# گام ۲: وقتی مطمئن شدی، ‑delete را در «انتهای» عبارت اضافه کن
find /tmp -type f -name "*.cache" -mtime +14 -deleteBashهشدار مهم
جستجو بر اساس مجوز و مالک
# فایلهای با مجوز پرخطر 777
find /var/www -type f -perm 0777
# ترکیب شرطها با -o (یا): فایلهای php یا html
find . -type f \( -name "*.php" -o -name "*.html" \)
# فایلهای متعلق به یک کاربر خاص
find /home -user www-data -type fBashعیبیابی خطاهای رایج find
نکته خودکارسازی
find در برابر locate و مدیریت فایل روی سرور وبداده
| معیار | find | locate |
|---|---|---|
| روش کار | پیمایش زنده فایلسیستم | جستجو در پایگاهداده از پیشساخته |
| بهروز بودن | همیشه لحظهای و دقیق | وابسته به آخرین updatedb (معمولاً روزانه) |
| سرعت | کندتر روی درختهای بزرگ | بسیار سریع |
| فیلترها | بسیار غنی (حجم، زمان، مجوز، اجرا) | عمدتاً بر اساس نام |
- ✅ دسترسی کامل root و آزادی نصب هر ابزار خط فرمان لینوکس.
- ✅ زیرساخت HPE Gen10/Gen11 با دیسکهای پرسرعت برای پیمایش سریع فایلسیستم.
- ✅ امکان تهیه اسنپشات پیش از عملیات حذفی، برای امنیت کار با -delete.
- ✅ پشتیبانی فنی ۲۴ ساعته برای راهنمایی در مدیریت سرور.
از مستندات رسمی
محدودیتها را صادقانه بدانید
سؤالات متداول درباره دستور find
تفاوت find و locate در لینوکس چیست؟
find فایلسیستم را بهصورت زنده میگردد و نتیجهاش همیشه بهروز است اما کندتر است؛ locate در یک پایگاهداده از پیشساخته جستجو میکند و بسیار سریع است اما ممکن است فایلهای اضافهشده پس از آخرین بهروزرسانی پایگاهداده را نشان ندهد. برای جستجوی دقیق و شرطهای پیچیده find و برای یافتن سریع نام، locate مناسب است.
چطور فایلها را بدون توجه به بزرگی و کوچکی حروف پیدا کنم؟
بهجای -name از -iname استفاده کنید. برای نمونه find . -iname "backup*" هم backup و هم Backup و BACKUP را پیدا میکند.
چگونه فایلهای بزرگتر از یک حجم مشخص را پیدا کنم؟
از گزینه -size با علامت + استفاده کنید؛ مثلاً find / -type f -size +500M فایلهای بزرگتر از ۵۰۰ مگابایت را در کل سیستم مییابد. واحدها k برای کیلوبایت، M برای مگابایت و G برای گیگابایت هستند.
آیا دستور find میتواند فایلها را حذف کند و آیا امن است؟
بله، با گزینه -delete یا با -exec rm {} +. اما این کار برگشتناپذیر است. روش امن این است که ابتدا فرمان را بدون -delete اجرا کنید، خروجی را با دقت ببینید و تنها پس از اطمینان، گزینه حذف را در انتهای فرمان اضافه کنید. تهیه بکاپ پیش از حذف انبوه ضروری است.
خطای «Permission denied» هنگام اجرای find یعنی چه؟
یعنی کاربر فعلی اجازه خواندن برخی پوشهها را ندارد. میتوانید فرمان را با sudo اجرا کنید یا با افزودن 2>/dev/null به انتهای دستور، این پیامها را پنهان کنید تا فقط نتایج معتبر نمایش داده شوند.
تفاوت -exec {} \; و -exec {} + چیست؟
با \; دستور یکبار برای هر فایل اجرا میشود؛ پس اگر هزار فایل پیدا شود، هزار بار دستور صدا زده میشود. با + همه فایلها یکجا به دستور داده میشوند که بسیار کارآمدتر است. برای حجم زیاد فایل، حالت + یا ابزار xargs را ترجیح دهید.
چطور فقط در یک سطح از پوشهها جستجو کنم و وارد زیرشاخهها نشوم؟
از گزینه -maxdepth 1 استفاده کنید؛ مثلاً find . -maxdepth 1 -name "*.conf" فقط در پوشه جاری جستجو میکند. این گزینه باید پیش از شرطهای دیگر نوشته شود.
چگونه فایلهای تغییریافته در چند روز اخیر را پیدا کنم؟
با گزینه -mtime: عدد منفی یعنی «اخیر» و عدد مثبت یعنی «قدیمیتر». برای نمونه find /var/www -mtime -3 فایلهای تغییریافته در سه روز اخیر را نشان میدهد. برای دقت بر حسب دقیقه از -mmin استفاده کنید.
آیا find روی همه توزیعهای لینوکس یکسان کار میکند؟
نسخه GNU این دستور (رایج در اوبونتو، دبیان، CentOS و سایر توزیعهای اصلی) رفتار یکسانی دارد. تفاوتهای جزئی ممکن است در سیستمهای BSD یا macOS دیده شود، اما گزینههای پایهای مثل -name، -type و -size تقریباً همهجا یکساناند.



