Կատարեք Grep ռեկուրսիվ որոնում բոլոր ֆայլերում և գրացուցակներում


Բազմակողմանի grep հրամանը թույլ է տալիս կատարել տեքստի որոնում բոլոր ֆայլերում և գրացուցակի բոլոր ենթացանցերում: Ահա թե ինչպես դա անել:

Grep-ը հիանալի գործիք է, երբ պետք է որոնել ֆայլի բովանդակությունը:

Սովորաբար, դուք գործարկում եք grep-ը մեկ ֆայլի վրա, ինչպիսին է սա.

grep search_term filename

Grep-ը բավականին բազմակողմանի է: Եթե ցանկանում եք որոնել գրացուցակի բոլոր ֆայլերը grep-ով, օգտագործեք այն այսպես.

grep search_term *

Դրա հետ կապված խնդիր կա։ Այն որոնում է միայն ընթացիկ գրացուցակի բոլոր ֆայլերում: Այն չի փնտրի ենթագրքերում:

Դուք կարող եք grep որոնում կատարել ընթացիկ գրացուցակի բոլոր ֆայլերում և բոլոր ենթագրքերում՝ օգտագործելով -r ռեկուրսիվ որոնման տարբերակը.

grep -r search_term . 

Կարող եք նաև նշել գրացուցակի ուղին, եթե այն գրացուցակում չեք, որտեղ ցանկանում եք կատարել որոնումը.

grep -r search_term directory_path

Դա արագ ամփոփում էր: Թույլ տվեք մանրամասնորեն ցույց տալ ձեզ այս ամենը պատշաճ օրինակներով, որպեսզի ձեզ համար ավելի հեշտ լինի հասկանալ:

Grep որոնում գրացուցակի բոլոր ֆայլերում

Ահա գրացուցակի կառուցվածքը, որը ես պատրաստվում եմ օգտագործել այս օրինակում: Բացի vala.txt-ից, բոլոր ֆայլերը պարունակում են «պարզ» տերմինը, որի վրա ես կկատարեմ grep որոնումը:

abhishek@LHB:~/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

Ընթացիկ դիրեկտորիաների բոլոր ֆայլերում «պարզ» բառը որոնելու համար պարզապես օգտագործեք wild card (*): Wild card-ը իրականում փոխարինում է ընթացիկ գրացուցակի բոլոր ֆայլերի և գրացուցակների անուններով:

grep simple *

Սա կփնտրի ընթացիկ դիրեկտորիաների բոլոր ֆայլերում, բայց այն չի մտնի ենթագրքեր: Քանի որ դուք չեք կարող ուղղակիորեն grep որոնումը գրացուցակի վրա, այն ցույց կտա «XYZ is a directory» սխալը որոնման արդյունքների հետ միասին:

Եթե դուք նույն գրացուցակում չեք, որտեղ ցանկանում եք կատարել, կարող եք նշել գրացուցակի ուղին և ավարտել այն /*-ով:

grep search_term directory_path/*

Հիմնականում դուք օգտագործում եք wild card-ը տվյալ գրացուցակի բոլոր տարրերի (ֆայլերի և գրացուցակների) վրա ընդլայնելու համար։

Այժմ, երբ դուք դա գիտեք, եկեք տեսնենք, թե ինչպես կարող եք կատարել ռեկուրսիվ որոնում grep-ով, որպեսզի այն նաև փնտրի ենթագրքերում գտնվող ֆայլերը:

Grep ռեկուրսիվ որոնում գրացուցակի բոլոր ենթագրքերում

Grep-ը ռեկուրսիվ որոնման համար տրամադրում է -r տարբերակ: Այս ընտրանքով grep-ը կդիտի ընթացիկ (կամ նշված) գրացուցակի բոլոր ֆայլերը, ինչպես նաև բոլոր ենթադիրեկտորիաների բոլոր ֆայլերը:

Ահա ռեկուրսիվ որոնումը, որը ես կատարեցի նախորդ օրինակում՝ ընթացիկ թղթապանակում grep որոնում կատարելու համար.

grep -r simple .

Ահա արդյունքը.

Կա նաև -R տարբերակ ռեկուրսիվ որոնման համար և այն աշխատում է գրեթե նույնը, ինչ -r տարբերակը։

grep -R simple .

Այսպիսով, ո՞րն է տարբերությունը grep -r և grep -R: Իրականում միայն մեկը. -R-ի որոնումն անջատված է, ինչը նշանակում է, որ այն կհետևի խորհրդանշական հղումներին, որպեսզի գնա բնօրինակ ֆայլ (որը կարող է տեղակայված լինել համակարգի որևէ այլ մասում):

Նայեք նույն օրինակում -R որոնման արդյունքին.

Նկատեցի՞ք, որ այն տալիս է լրացուցիչ որոնման արդյունք linked.txt-ով, որը հիմնականում խորհրդանշական հղում է և դուրս է մնացել -r տարբերակով grep որոնումից:

Եթե դուք այն գրացուցակում չեք, որտեղ ցանկանում եք կատարել ռեկուրսիվ որոնում, պարզապես տրամադրեք գրացուցակի բացարձակ կամ հարաբերական ուղին 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

Ահա, թե ինչ տեսք ունեն բացառող դիրեկտորիաները մեր օրինակում այստեղ.

Եվ այո, ինչպես ցույց է տրված վերը նշված օրինակով, բացառումն աշխատում է և՛ -r, և՛ -R ռեկուրսիվ տարբերակներով:

Ամփոփել

Ահա մի քանի ֆայլերի և գրացուցակների համար grep որոնման օգտագործման արագ ամփոփում.

grep string *

Որոնում է ընթացիկ գրացուցակի բոլոր ֆայլերում

grep string dir

Որոնում է dir գրացուցակի բոլոր ֆայլերում

grep -r string .

Ռեկուրսիվ որոնում բոլոր ենթադիրեկտորիաների բոլոր ֆայլերում

grep -r string dir

Ռեկուրսիվ որոնում բոլոր ֆայլերում dir

grep -R string .

Նույնը, ինչ r, բայց հետևում է խորհրդանշական հղումներին

Հուսով եմ, որ ձեզ դուր կգա այս արագ grep խորհուրդը: Եթե ցանկանում եք ավելին, կարող եք կարդալ այս մանրամասն ձեռնարկը grep հրամանի օգտագործման վերաբերյալ.

Տեղեկացրեք ինձ, եթե ունեք հարցեր կամ առաջարկություններ այս թեմայի վերաբերյալ: