آموزش دستور find در لینوکس به همراه مثال های کاربردی

زمان مطالعه: 7 دقیقه

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

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

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

دستور find در لینوکس
دستور find در لینوکس

دستور find در لینوکس چیست؟

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

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

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

ساختار دستور find در لینوکس

پیش از آنکه با گزینه‌ها و کاربردهای مختلف دستور find در لینوکس آشنا شوید، بهتر است ساختار کلی این دستور را بشناسید. به‌طور کلی، دستور find در لینوکس از سه بخش اصلی تشکیل شده است: مسیر جستجو (Path)، شرایط جستجو (Expression) و عملیات بسته به نیاز خود می‌توانید از یک یا چند مورد از این بخش‌ها استفاده کنید.ساختار کلی دستور find به شکل زیر است:

				
					find [Path] [Expression] [Action]
				
			

هر یک از بخش‌های این دستور وظیفه مشخصی دارند:

  • Path مسیری را مشخص می‌کند که جستجو باید از آن آغاز شود. برای مثال، اگر مسیر home/ را وارد کنید، دستور تنها فایل‌ها و پوشه‌های موجود در این دایرکتوری و زیرشاخه‌های آن را بررسی می‌کند. همچنین با استفاده از نقطه (.) می‌توانید جستجو را از دایرکتوری فعلی آغاز کنید.
  • Expressionشرایط یا فیلترهای جستجو را تعیین می‌کند. برای مثال، می‌توانید مشخص کنید که فقط فایل‌هایی با نام خاص، نوع مشخص، حجم معین یا تاریخ ویرایش خاص جستجو شوند. بیشتر قابلیت‌های دستور find از طریق همین بخش در اختیار شما قرار می‌گیرد.
  • Actionعملیاتی است که پس از پیدا شدن فایل‌ها یا پوشه‌های منطبق با شرایط اجرا می‌شود. اگر این بخش را مشخص نکنید، دستور find به صورت پیش فرض مسیر فایل‌ها و دایرکتوری‌های پیدا شده را نمایش می‌دهد. همچنین می‌توانید عملیاتی مانند حذف فایل، تغییر سطح دسترسی یا اجرای یک دستور دیگر را نیز روی نتایج اعمال کنید.

اکنون که با ساختار کلی دستور find در لینوکس آشنا شدید، در ادامه با ساده‌ترین مثال‌ها، نحوه استفاده از این دستور را به صورت عملی بررسی می‌کنیم.

نحوه استفاده از دستور find در لینوکس

ساده‌ترین روش برای استفاده از دستور find در لینوکس، اجرای آن بدون هیچ شرطی است. در این حالت، دستور تمام فایل‌ها و پوشه‌های موجود در مسیر مشخص شده را به همراه محتویات زیرشاخه‌های آن نمایش می‌دهد.

برای مثال، اگر بخواهید تمام فایل‌ها و دایرکتوری‌های موجود در دایرکتوری فعلی را مشاهده کنید، کافی است دستور زیر را اجرا کنید:

				
					find  .
				
			

در این دستور، علامت ( . ) به معنی دایرکتوری فعلی است. بنابراین، دستور find جستجو را از همان مسیر آغاز کرده و تمام فایل‌ها و پوشه‌های موجود در آن و زیرشاخه‌هایش را نمایش می‌دهد.

همچنین می‌توانید به جای دایرکتوری فعلی، مسیر دلخواه خود را نیز مشخص کنید. برای مثال، دستور زیر تمام فایل‌ها و پوشه‌های موجود در دایرکتوری /home را جستجو و نمایش می‌دهد:

				
					find /home
				
			

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

جستجوی فایل و پوشه بر اساس نام با دستور find

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

برای مثال، اگر بخواهید فایلی با نام test.txt را در دایرکتوری /home و تمام زیرشاخه‌های آن پیدا کنید، از دستور زیر استفاده کنید:

				
					find /home -name “test.txt”
				
			

در این دستور، جستجو از مسیر /home آغاز می‌شود و تنها فایل یا پوشه‌ای که دقیقا نام آن test.txt باشد، در خروجی نمایش داده خواهد شد.

همچنین اگر بخواهید جستجو از دایرکتوری فعلی آغاز شود، کافی است به جای مسیر، از علامت ( . ) استفاده کنید:

				
					find . -name “test.txt”
				
			

به این نکته توجه داشته باشید که گزینه -name به حروف کوچک و بزرگ حساس است. به عنوان مثال، فایل‌های Test.txt و test.txt از دید این دستور دو فایل متفاوت محسوب می‌شوند.. اگر قصد دارید بدون توجه به حروف بزرگ و کوچک جستجو انجام دهید، باید از گزینه -iname استفاده کنید که در بخش بعدی به آن خواهیم پرداخت.

جستجوی فایل بدون حساسیت به حروف بزرگ و کوچک

همانطور که گفته شد، گزینه -name به حروف بزرگ و کوچک حساس است (Case Sensitive). به همین دلیل، اگر نام فایل را با حروف متفاوت وارد کنید، ممکن است نتیجه‌ای نمایش داده نشود. در چنین شرایطی می‌توانید از گزینه -iname استفاده کنید.

گزینه -iname عمکردی مشابه -name دارد، با این تفاوت که هنگام جستجو بین حروف بزرگ و کوچک تفاوتی قائل نمی‌شود. برای مثال، فایل‌های test.txt، Test.txt و TEST.TXT همگی با این گزینه قابل جستجو هستند.

برای نمونه، دستور زیر فایل test.txt را بدون توجه به نحوه نوشته شدن حروف در مسیر /home جستجو می‌کند:

				
					find /home -iname “test.txt”
				
			

همچنین اگر بخواهید جستجو از دایرکتوری فعلی آغاز شود، می‌توانید از دستور زیر استفاده کنید:

				
					find . -iname “test.txt”
				
			

به طور کلی، زمانی که از نحوه نام‌گذاری فایل مطمئن نیستید یا احتمال می‌دهید بخشی از نام آن با حروف بزرگ نوشته شده باشد، استفاده از گزینه -iname انتخاب مناسب‌تری نسبت به -name خواهد بود.

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

در بسیاری از مواقع، نام دقیق فایل موردنظر را نمی‌دانید و تنها بخشی از نام یا پسوند آن را در اختیار دارید. در چنین مواقعی می‌توانید از کاراکترهای جایگزین (Wildcard) برای جستجوی فایل‌ها استفاده کنید. این کاراکترها به شما کمک می‌کنند فایل‌هایی را که از یک الگوی مشخص پیروی می‌کنند، به راحتی پیدا کنید.

پرکاربردترین کاراکتر جایگزین در لینوکس علامت (*) است. این کاراکتر به معنی صفر یا چند کاراکتر بوده و به شما امکان می‌دهد فایل‌هایی را که الگوی مشخصی داند، جستجو کنید.

برای مثال، اگر بخواهید تمام فایل‌های PHP را در دایرکتوری فعلی و زیرشاخه‌های آن پیدا کنید، از دستور زیر استفاده کنید:

				
					find .  -name “*.php”
				
			

در این مثال، عبارت *.php تمام فایل‌هایی را که پسوند آن‌ها .php است، مانند index.php، config.php و login.php پیدا می‌کند.

به همین ترتیب، برای جستجوی فایل‌های لاگ با پسوند .log یا فایل‌های پیکربندی با پسوند .conf می‌توانید از دستورات زیر استفاده کنید:

				
					find . -name “*.log”
				
			
				
					find . -name "*.conf"

				
			

استفاده از Wildcard یا کاراکترهای جایگزین تنها به پسوند فایل محدود نمی‌شود. برای مثال، اگر بخواهید تمام فایل‌هایی را که نام آن‌ها با عبارت backup شروع می‌شود پیدا کنید، می‌توانید دستور زیر را اجرا کنید:

				
					find . -name "backup*"
				
			

یا اگر تنها بخشی از نام فایل را می‌دانید، می‌توانید از الگوی زیر استفاده کنید:

				
					find . -name "*backup*"
				
			

این دستور تمام فایل‌ها و پوشه‌هایی را که عبارت backup در هر بخشی از نام آن‌ها وجود داشته باشد، نمایش می‌دهد. استفاده از کاراکترهای جایگزین یکی از سریع‌ترین روش‌ها برای محدود کردن نتایج جستجو و پیدا کردن فایل‌های موردنظر در میان تعداد زیادی فایل و دایرکتوری است.

جستجوی فایل‌ها و پوشه‌ها بر اساس نوع آن‌ها

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

رایج‌ترین مقادیر این گزینه عبارتند از:

  • f : برای جستجوی فایل‌ها (File)
  • d : برای جستجوی دایرکتوری‌ها (Directory)

جستجوی فایل‌ها

برای نمایش تمام فایل‌های موجود در دایرکتوری فعلی و زیرشاخه‌های آن، از دستور زیر استفاده کنید:

				
					find . -type f
				
			

اگر بخواهید فقط فایل‌های PHP را جستجو کنید، می‌توانید گزینه -type را با -name ترکیب کنید:

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

در این مثال، فقط فایل‌هایی با پسوند php. نمایش داده می‌شوند و دایرکتوری‌ها در نتایج قرار نخواهند گرفت.

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

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

				
					find . -type d
				
			

همچنین اگر به دنبال دایرکتوری خاصی هستید، می‌توانید با گزینه -name آن را جستجو کنید:

				
					find . -type d -name "backup"
				
			

این دستور فقط دایرکتوری‌هایی با نام backup را جستجو کرده و نمایش می‌دهد.

ترکیب گزینه -type با سایر گزینه‌های دستور find باعث می‌شود نتایج جستجو دقیق‌تر شوند و تنها فایل‌ها و پوشه‌های مورد نظر شما نمایش داده شوند.

جستجوی فایل‌ها بر اساس حجم

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

برای این کار از گزینه -size استفاده می‌شود. این گزینه امکان جستجوی فایل‌ها با اندازه مشخص، بزرگ‌تر یا کوچک‌تر از یک مقدار معین را فراهم می‌کند.

برای مثال، اگر بخواهید تمام فایل‌هایی را که حجم آن‌ها بیشتر از 100 مگابایت است پیدا کنید، از دستور زیر استفاده کنید:

				
					find . -type f -size +100M
				
			

در این دستور علامت (+) به معنی «بزرگ‌تر از» است؛ بنابراین فقط فایل‌هایی با حجم بیشتر از 100 مگابایت نمایش داده می‌شوند.

اگر بخواهید فایل‌هایی با حجم کمتر از 10 مگابایت را جستجو کنید، از دستور زیر استفاده کنید:

				
					find . -type f -size -10M
				
			

در اینجا علامت (-) به معنی «کوچک‌تر از » است.

همچنین اگر علامت (+) یا (-) را استفاده نکنید، دستور فایل‌هایی را جستجو می‌کند که حجم آن‌ها برابر با مقدار مشخص شده باشد:

				
					find . -type f -size 50M
				
			

نکته :  مقدار 50M در find همیشه به معنی دقیقا 50 مگابایت به مفهوم رایج نیست، بلکه بر اساس واحدهای داخلی find تفسیر می‌شود.

علاوه بر مگابایت (M)، می‌توانید از واحدهای دیگری نیز استفاده کنید. برخی از رایج‌ترین آن‌ها عبارتند از:

همچنین اگر به دنبال دایرکتوری خاصی هستید، می‌توانید با گزینه -name آن را جستجو کنید:

  • c : بر حسب بایت (Byte)
  • k : بر حسب کیلوبایت (KB)
  • M : بر حسب مگابایت (MB)
  • G : بر حسب گیگابایت (GB)

با ترکیب گزینه -size با سایر گزینه‌های دستور find، می‌توانید فایل‌های مورد نظر خود را با دقت بیشتری جستجو کنید. برای مثال، می‌توان تنها فایل‌های لاگ با حجم بیش از 500 مگابایت یا فایل‌های پشتیبان بزرگ‌تر از 1 گیگابایت را پیدا کرد.

بدون دیدگاه

دیدگاهتان را بنویسید

هاستvpsسرور اختصاصی