GNU/Linux >> Znalost Linux >  >> Linux

Jak provádět vyhledávání Grep ve všech souborech a ve všech adresářích

Grep je vynikající nástroj, když musíte hledat v obsahu souboru.

Obvykle spustíte grep na jediném souboru takto:

grep search_term filename

Grep je docela všestranný. Pokud chcete prohledat všechny soubory v adresáři pomocí grep , použijte jej takto:

grep search_term *

Je s tím problém. Prohledává pouze všechny soubory v aktuálním adresáři. Nebude hledat v podadresářích.

Můžete provést grep vyhledávání ve všech souborech a všech podadresářích aktuálního adresáře pomocí -r možnost rekurzivního vyhledávání:

grep -r search_term . 

Můžete také zadat cestu k adresáři, pokud se nenacházíte v adresáři, kde chcete provést vyhledávání:

grep -r search_term directory_path

To byla rychlá rekapitulace. Dovolte mi, abych vám to vše podrobně ukázal na správných příkladech, aby to bylo pro vás snazší.

Grep prohledává všechny soubory v adresáři

Zde je adresářová struktura, kterou použiji v tomto příkladu. Všechny soubory kromě empty.txt obsahují výraz 'simple', na kterém provedu vyhledávání grep.

[email protected]:~/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

Chcete-li vyhledat slovo 'simple' ve všech souborech aktuálních adresářů, stačí použít zástupný znak (*). Zástupný znak ve skutečnosti nahrazuje názvy všech souborů a adresářů v aktuálním adresáři.

grep simple *

To prohledá všechny soubory v aktuálních adresářích, ale nevstoupí do podadresářů. Protože nemůžete přímo vyhledávat grep v adresáři, zobrazí se spolu s výsledky hledání chyba „XYZ je adresář“.

Pokud nejste ve stejném adresáři, kde chcete hrát, můžete zadat cestu k adresáři a ukončit ji /*

grep search_term directory_path/*

Zástupný znak v podstatě používáte k rozbalení všech prvků (souborů a adresářů) daného adresáře.

Nyní, když to víte, se podívejme, jak můžete provést rekurzivní vyhledávání pomocí grep, aby se také podíval do souborů v podadresářích.

Rekurzivní vyhledávání Grep ve všech podadresářích adresáře

Grep poskytuje -r možnost rekurzivního vyhledávání. S touto volbou se grep podívá do všech souborů v aktuálním (nebo specifikovaném) adresáři a také se podívá do všech souborů všech podadresářů.

Zde je rekurzivní vyhledávání, které jsem provedl v předchozím příkladu pro vyhledávání grep v aktuální složce:

grep -r simple .

Zde je výsledek:

Existuje také -R volba pro rekurzivní vyhledávání a funguje téměř stejně jako -r možnost.

grep -R simple .

Jaký je tedy rozdíl grep -r a grep -R ? Vlastně jen jeden. -R je dereferencované vyhledávání, což znamená, že bude následovat symbolické odkazy, aby se dostal k původnímu souboru (který může být umístěn v nějaké jiné části systému).

Podívejte se na výstup -R hledejte ve stejném příkladu:

Všimli jste si, že poskytuje další výsledek hledání s linked.txt což je v podstatě symbolický odkaz a byl vynechán z vyhledávání grep pomocí -r možnost?

Pokud se nenacházíte v adresáři, kde chcete provést rekurzivní vyhledávání, zadejte absolutní nebo relativní cestu k adresáři příkazu grep:

grep -r search_term path_to_directory

Všechno vypadá dobře, ale co když chcete vyloučit určitý adresář z rekurzivního vyhledávání? I na to existuje ustanovení. Řekl jsem vám, že grep je extrémně všestranný příkaz.

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

To není ono. Z rekurzivního vyhledávání můžete vyloučit více než jeden podadresář následujícím způsobem:

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

Takto vypadá vyloučení adresářů v našem příkladu zde:

A ano, jak ukazuje příklad výše, vyloučení funguje s oběma -r a -R rekurzivní možnosti.

Shrnutí

Zde je rychlé shrnutí použití vyhledávání grep pro více souborů a adresářů:

Příkaz Grep Popis
řetězec grep * Hledá ve všech souborech v aktuálním adresáři
grep string dir Hledá ve všech souborech v adresáři dir
grep -r řetězec . Rekurzivní vyhledávání ve všech souborech ve všech podadresářích
grep -r string dir Rekurzivní vyhledávání ve všech souborech ve všech podadresářích dir
řetězec grep -R . Stejné jako r, ale následuje symbolické odkazy

Doufám, že se vám tento rychlý grep tip líbí. Pokud chcete více, můžete si přečíst tento podrobný návod na použití příkazu grep:

Pokud máte nějaké dotazy nebo návrhy k tomuto tématu, dejte mi vědět.


Linux
  1. Jak vyhledávat a odstraňovat adresáře rekurzivně v systému Linux

  2. Jak archivovat soubory a adresáře v Linuxu [část 2]

  3. Jak najdu všechny soubory a adresáře, do kterých lze zapisovat konkrétním uživatelem?

  1. Jak archivovat soubory a adresáře v Linuxu [část 1]

  2. Příkazový řádek:vyhledejte a nahraďte všechny názvy souborů odpovídající grep

  3. Jak rekurzivně vypsat všechny soubory a adresáře

  1. Jak kopírovat soubory a adresáře v Linuxu

  2. Jak najít konkrétní řetězec nebo slovo v souborech a adresářích

  3. Jak prohledám adresáře a najdu soubory, které odpovídají regulárnímu výrazu?