چگونه می توانم تمام فایل های دارای یک متن خاص در لینوکس را پیدا کنم؟

  • آخرین بروزرسانی پرسش در کاپ کد در یکشنبه 17 می 2020

من سعی دارم روشی را برای جستجوی تمام سیستم لینوکس برای پیدا کردن تمام فایل هایی که یک متن خاص دارند، پیدا کنم. منظورم متنی در نام فایل ها نیست بلکه در خود فایل هاست.

زمانی که به دنبال انجام این کار بودم، دوبار با این راهکار روبرو شدم

find / -type f -exec grep -H 'text-to-find-here' {} ;

با این حال، کار نمیکنه. به نظر میرسه این دستور تک تک فایل ها در سیستم را نشان می دهد.

آیا این روش به کاری که می خواهم انجام بدم نزدیک هست؟ اگر نه چطور باید این کار رو انجام بدم؟ این که بتوان یک رشته متنی رو در فایل ها جستجو کرد به شدت برای پروژه های برنامه نویسی کاربردی هست.

پرسش امتیازی🔝
تعداد بازدید 6443731
امتیاز 5137👍
رای 5142👍
📅 پرسش در
📅 آخرین ویرایش

برای این پرسش 4 پاسخ وجود دارد

4

به این شکل عمل کن:

grep -rnw '/path/to/somewhere/' -e 'pattern'
  • -r یا -R بازگشتی هست,
  • -n شماره خط, و
  • -w برای تطابق کل کلمه هست.
  • -l (lower-case L) به این منظور هست که فقط نام فایل نمایش داده بشه.

جدای از این ها پرچم های --exclude, --include, --exclude-dirبرای جستجوی بهینه تر قابل استفاده هستند:

  • به این شکل فقط فایل هایی که دارای پسوند .h یا .c هستند جستجو می شوند:

    grep --include=*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
    
  • به این شکل فقط فایل های جستجو میشه که آخر پسوند فایل با o به پایان برسه:

    grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
    
  • برای مسیر ها امکان مستثنی کرد یک مسیر یا مسیر های خاص با استفاده از پارامتر --exclude-dirوجود داره. برای نمونه، به شکل زیر از مسیر های dir1/, dir2/ و تمام مسیر هایی که مطابق *.dst هستند، چشم پوشی میشه:
    grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"
    

این راهکار برای من به خوبی کار میکنه و درست چیزی که میخوای رو میتونم به همین روش بدست بیاورم.

برای گزینه های بیشتر man grep رو بررسی کن.

امتیاز 9264👍

پاسخ تایید شده
📅 پاسخ در
📅 آخرین ویرایش

میتونی از grep -ilRاستفاده کنی:

grep -Ril "text-to-find-here" /
  • i برای چشم پوشی از بزرگ و کوچیکی حروف هست.
  • R به منظور بازگشتی بودن جستجو هست.
  • l به معنی این هست که نام فایل رو به جای خود نتیجه نشون بده".
  • / به معنای شروع از root سیستم هست.

امتیاز 1456👍

📅 پاسخ در
📅 آخرین ویرایش

میتونی از ack استفاده کنی. مثل grep برای سورس کد هست. میتونی برای جستجوی کل فایل سیستم از اون استفاده کنی:

فقط کافیه:

ack 'text-to-find-here'

رو در مسیر root اجرا کنی.

همچنین میتونی از regular expressions برای پیدا کردن یک نوع از فایل و... استفاده کنی.


برورسانی

من به تازگی The Silver Searcher رو پیدا کردم که مثل ack هست اما 3 تا 5 برابر از اون سریع تره و حتی از الگو های فایل .gitignoreهم چشم پوشی میکنه.

امتیاز 320👍

📅 پاسخ در
📅 آخرین ویرایش

میتونی از این استفاده کنی

grep -inr "Text" folder/to/be/searched/

امتیاز 112👍

📅 پاسخ در
📅 آخرین ویرایش
برای دنبال کردن نوشته های کاپ کد به کانال تلگرامی آن (cupcode_ir@) بپیوندید!

دیدگاه خود را بیان کنید

@