آموزشیلینوکس

نحوه جستجو با دستور Grep در همه فایل ها و دایرکتوری ها

آموزش استفاده از دستور Grep برای جستجو در فایل و دایرکتوری ها

دستور Grep

دستور همه کاره grep در لینوکس به شما امکان می دهد یک متن را در تمام فایل ها و همه زیرشاخه های یک فهرست جستجو کنید. در این مقاله نحوه انجام این کار آمده است. Grep یک ابزار عالی برای زمانی است که باید محتوای یک فایل را جستجو کنید. اگر به سرور مجازی لینوکس احتیاج دارید، حتما از صفحه خرید VPS ایران دیدن کنید.

معمولاً از دستور grep روی یک فایل مانند زیر اجرا می کنید:

grep search_term filename

دستور Grep کاملاً همه کاره است. اگر می خواهید تمام فایل های یک دایرکتوری را با grep جستجو کنید، از آن به صورت زیر استفاده کنید:

grep search_term *

 

مشکلی که وجود دارد این است که فقط در تمام فایل های دایرکتوری فعلی جستجو می کند. در زیر شاخه های یک دایرکتوری جستجو نمی کند. می‌توانید با استفاده از گزینه جستجوی بازگشتی -r در همه فایل‌ها و زیر شاخه‌های فهرست فعلی جستجوی grep انجام دهید:

grep -r search_term .

همچنین اگر در فهرستی که می‌خواهید جستجو را انجام دهید، نیستید، میتوانید مسیر دایرکتوری را نیز مشخص کنید:

grep -r search_term directory_path

مطالب بالا فقط  یک جمع بندی سریع بود. اجازه دهیددر ادامه همه اینها را با مثال های مناسب به شما با جزئیات نشان دهم تا درک آن برای شما راحت تر باشد.

 

جستجوی Grep در تمام فایل های یک دایرکتوری

در اینجا ساختار یک دایرکتوری است که می خواهیم در این مثال استفاده کنیم. به جز vala.txt، همه فایل ها حاوی عبارت “simple” هستند. میخواهیم جستجوی کلمه simple را در این دایرکتوری و روی فایل ها انجام دهیم.

IranicaServer:~/scripts$ tree
.
├── dir1
│ └── new_script.sh
├── dir2
│ └── your_script.sh
├── dir3
│ ├── empty.txt
│ └── linked.txt -> ../../sample.txt
├── my_script.sh
└── your_script.sh

3 directories, 6 files

 

برای جستجوی کلمه simple در تمام فایل های دایرکتوری فعلی، فقط از کارت وایلد (*) استفاده کنید. کارت وایلد در واقع با نام تمام فایل ها و دایرکتوری ها در فهرست فعلی جایگزین می شود. بطور ساده، میخواهیم با دستور Grep روی همه فایلهای موجود عمل سرچ را انجام میدهد.

grep simple *

این دستور grep در همه فایل های دایرکتوری فعلی جستجو را انجام میدهد اما وارد زیر شاخه ها نمی شود. از آنجایی که نمی‌توانید مستقیماً جستجوی grep را در یک دایرکتوری انجام دهید، خطای “XYZ is a directory” را همراه با نتایج جستجو نشان می‌دهد.

 

جستوجوی همه فایل ها با دستور Grep

 

اگر در همان دایرکتوری که می خواهید اجرا کنید نیستید، می توانید مسیر دایرکتوری را مشخص کرده و با /* پایان دهید.

grep search_term directory_path/*

 

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

 

جستجوی بازگشتی Grep در همه زیر شاخه های یک فهرست

دستور Grep یک گزینه -r برای جستجوی بازگشتی هم فراهم می کند. با این گزینه، grep به تمام فایل های موجود در فهرست فعلی (یا مشخص شده) و همچنین به تمام فایل های همه زیر شاخه ها نگاه می کند. این جستجوی بازگشتی است که در مثال قبلی برای انجام جستجوی grep در پوشه فعلی انجام دادیم:

grep -r simple .

 

جستوجوی برگشتی با دستور -r

 

همچنین یک گزینه -R برای جستجوی بازگشتی وجود دارد و تقریباً مانند گزینه -r عمل می کند. تفاوت دستور های grep -r و grep -R در چیست؟ در واقع فقط یکی -R جستجوی ارجاع داده نشده است. به این معنی که پیوندهای نمادین را برای رفتن به فایل اصلی (که ممکن است در قسمت دیگری از سیستم قرار دارد) دنبال کند. به خروجی جستجوی -R در همین مثال نگاه کنید:

grep -R simple .

 

جستوجوی برگشتی با دستور -r 2

 

همانطور که میدانید یک نتیجه جستجوی دیگر با linked.txt می دهد که اساساً یک پیوند نمادین است. و از جستجوی grep با گزینه -r حذف شده است. اگر در فهرستی نیستید که می‌خواهید جستجوی بازگشتی را انجام دهید، کافیست مسیر مطلق یا نسبی دایرکتوری را به دستور grep ارائه دهید:

grep -r search_term path_to_directory

 

حذف یک دایرکتوری خاص از یک جستوجوی بازگشتی Grep

تا اینجا همه چیز خوب به نظر می رسد، اما اگر بخواهید یک فهرست خاص را از جستجوی بازگشتی حذف کنید، باید چه کنید؟ برای این کار هم راهی وجود دارد. همانطور که در ابتدا به شما گفتیم، grep یک دستور فوق العاده همه کاره است.

grep -r --exclude-dir=dir_name serach_term directory_path

حتی اگر بخواهید، به روش زیر می توانید بیش از یک زیر شاخه را از جستجوی بازگشتی حذف کنید. در تصویر زیر میتوانید با جزییات بیشتری بررسی کنید:

grep -r --exclude-dir={dir1,dir2} serach_term directory_path

 

grep exclude directory

 

همانطور که در مثال بالا میبینید، حذف با هر دو گزینه بازگشتی -r و -R تمکان پذیر است. برای اینکه عملکرد دستورات را بهتر و دقیق تر متوجه شوید، بهتر است خودتان هر یک را امتحان کنید. در این مقاله نحوه سرچ عبارت در دایرکتوری و فایل را با استفاده از دستور Grep یاد گرفتید. از همراهی شما متشکریم.

 

20رای - امتیاز 4.8 ممنون از امتیازی که دادید..!

نوشته های مشابه

یک دیدگاه

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

نشانی ایمیل شما منتشر نخواهد شد.

دکمه بازگشت به بالا