خدایگان ترمینال لینوکس

خدایگان ترمینال لینوکس

@programming_tips

درسنامه ۲۲: دستور find – پیدا کردن فایل در لینوکس

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


معرفی دستور find

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

فرم کلی دستور:

find path options expression

برای مثال:

find . -name "test.py"

در این مثال، دستور در مسیر جاری به دنبال فایلی با نام test.py می‌گردد.


جستجو براساس نام فایل

یکی از ساده‌ترین و رایج‌ترین کاربردها، جستجوی نام فایل است.

نمونه دستور:

find /home -name "notes.txt"

این دستور در پوشه home/ و همه زیرپوشه‌های آن به دنبال فایل notes.txt می‌گردد.

اگر به بزرگی و کوچکی حروف حساس نباشید:

find . -iname "report.pdf"

گزینه iname- جستجو را بدون حساسیت به حروف انجام می‌دهد.


جستجو براساس نوع فایل

دستور find می‌تواند براساس نوع فایل جستجو کند. برای مثال پیدا کردن پوشه‌ها:

find . -type d -name "backup"

یا پیدا کردن فایل‌های معمولی:

find . -type f -name "*.log"

یا پیدا کردن لینک‌های سمبلیک:

find / -type l

جستجو براساس اندازه فایل

با استفاده از گزینه size- می‌توان فایل‌ها را براساس اندازه پیدا کرد.

نمونه‌ها:

پیدا کردن فایل‌های بزرگ‌تر از ۱۰۰ مگابایت:

find /var -size +100M

پیدا کردن فایل‌های کوچک‌تر از ۵۰۰ کیلوبایت:

find . -size -500k

پیدا کردن فایل‌هایی با اندازه دقیق:

find . -size 10M

جستجو براساس زمان تغییر

گزینه mtime- برای زمان آخرین تغییر فایل استفاده می‌شود.

نمونه‌ها:

فایل‌هایی که طی ۲۴ ساعت گذشته تغییر کرده‌اند:

find . -mtime -1

فایل‌هایی که بیش از ۳۰ روز پیش تغییر کرده‌اند:

find . -mtime +30

فایل‌هایی که دقیقا ۷ روز پیش تغییر کرده‌اند:

find . -mtime 7

جستجو براساس سطح دسترسی

گاهی می‌خواهیم فایل‌هایی با دسترسی خاص پیدا کنیم. گزینه perm- این کار را انجام می‌دهد.

مثال:

find /var/www -perm 644

یا فایل‌هایی با دسترسی خطرناک:

find . -perm 777

اجرای دستورات روی نتایج

قدرت واقعی find زمانی مشخص می‌شود که از گزینه exec- استفاده شود. این گزینه اجازه می‌دهد هر دستور دلخواه روی فایل‌های پیدا شده اجرا شود.

مثال حذف فایل‌ها:

find . -name "*.tmp" -exec rm {} \;

نمونه چاپ مسیر فایل‌های پیدا شده:

find . -type f -exec echo "File: {}" \;

نمونه باز کردن فایل‌ها با برنامه خاص:

find . -name "*.pdf" -exec xdg-open {} \;

نمونه شمارش تعداد:

find . -type f | wc -l

محدود کردن سطح جستجو

می‌توان محدوده عمق جستجو را مشخص کرد.

جستجو فقط در سطح اول:

find . -maxdepth 1 -type f

جستجو از سطح دوم به بعد:

find . -mindepth 2 -type f

ترکیب چند شرط

یکی از قدرتمندترین ویژگی‌ها، ترکیب چند شرط با هم است.

مثال: پیدا کردن فایل‌های js. که طی ۷ روز گذشته تغییر کرده‌اند:

find . -name "*.js" -mtime -7 -type f

مثال: پیدا کردن فایل‌های بزرگ‌تر از ۵۰ مگابایت که دسترسی 644 دارند:

find . -size +50M -perm 644

چند نکته مهم

  • دستور find برای کار با پروژه‌های بزرگ و سرورها ضروری است.
  • برخلاف دستور grep، جستجو براساس محتوای فایل انجام نمی‌دهد مگر اینکه با exec و grep ترکیب شود.
  • برای سرعت بیشتر، سعی کنید مسیر جستجو را دقیق انتخاب کنید.
  • استفاده از exec- با rm باید با احتیاط انجام شود.
  • این دستور ابزاری بسیار انعطاف‌پذیر است و اغلب نیازهای مدیریت فایل را پوشش می‌دهد.

جمع‌بندی

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

Report Page