خدایگان ترمینال لینوکس
@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 یکی از انعطافپذیرترین ابزارهای لینوکس برای جستجوی فایلها و پوشههاست. با ترکیب گزینهها، اجرای دستورات روی نتایج و قابلیت جستجو براساس نام، زمان، نوع، اندازه و دسترسی، این دستور به یک ابزار حرفهای و بسیار کاربردی برای مدیریت سیستم تبدیل میشود.