GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu grep rekurzivně filtrovat názvy souborů, které chci, pomocí zástupných znaků?

Použijte grep 's --include možnost:

grep -ir "string" --include="*.php" .

Pokud máte verzi grep který postrádá --include možnost, můžete použít následující. Oba byly testovány na adresářové struktuře, jako je tato:

$ tree
.
├── a
├── b
│   └── foo2.php
├── c
│   └── d
│       └── e
│           └── f
│               └── g
│                   └── h
│                       └── foo.php
├── foo1.php
└── foo.php

Kde jsou všechny .php soubory obsahují řetězec string .

  1. Použijte find

    $ find . -name '*php' -exec grep -H string {} +
    ./b/foo2.php:string
    ./foo1.php:string
    ./c/d/e/f/g/h/foo.php:string
    

    Vysvětlení

    Tím se najde všech .php soubory a poté spusťte grep -H string na každém z nich. S find 's -exec možnost, {} je nahrazeno každým z nalezených souborů. -H říká grep vytiskne název souboru a odpovídající řádek.

  2. Za předpokladu, že máte dostatečně novou verzi bash , použijte globstar :

    $ shopt -s globstar
    $ grep -H string  **/*php
    b/foo2.php:string
    c/d/e/f/g/h/foo.php:string
    foo1.php:string
    

    Vysvětlení

    Jak je vysvětleno v manuálu bash:

    globstar

    Je-li nastaven, vzor „**“ použitý v kontextu rozšíření názvu souboru bude odpovídat všem souborům a žádnému nebo více adresářům a podadresářům. Pokud za vzorem následuje znak „/“, shodují se pouze adresáře a podadresáře.

    Takže spuštěním shopt -s globstar aktivujete funkci a Bashův globstar možnost, která dělá **/*php rozbalte na všechny .php soubory v aktuálním adresáři (** odpovídá 0 nebo více adresářům, takže **/*php odpovídá ./foo.php také), které jsou pak vyhledány pro string .


Linux
  1. Jak přesunout soubory a zobrazit průběh (např. pomocí ukazatele průběhu)?

  2. Jak mohu spustit kód PHP z příkazového řádku?

  3. Jak mohu vidět velikost souborů a adresářů v linuxu?

  1. Základy Linuxu:Jak stahovat soubory do prostředí pomocí Wget

  2. Jak mohu přesouvat soubory pomocí xargs v Linuxu?

  3. Jak mohu vyloučit soubory ve výchozím nastavení pomocí rsync?

  1. Jak vytisknout název chybějících souborů ve složce?

  2. Jak mohu změnit název mnoha souborů ve složce?

  3. Jak mohu grep rekurzivně?