GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso grep filtrando in modo ricorsivo il nome dei file che voglio con i caratteri jolly?

Usa grep --include di opzione:

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

Se hai una versione di grep a cui manca il --include opzione, è possibile utilizzare quanto segue. Entrambi sono stati testati su una struttura di directory come questa:

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

Dove tutti i .php i file contengono la stringa string .

  1. Usa find

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

    Spiegazione

    Questo troverà tutti i .php file e quindi eseguire grep -H string su ciascuno di essi. Con find -exec di opzione, {} è sostituito da ognuno dei file trovati. Il -H dice grep per stampare il nome del file e la riga corrispondente.

  2. Supponendo che tu abbia una versione abbastanza nuova di bash , utilizza globstar :

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

    Spiegazione

    Come spiegato nel manuale di bash:

    globstar

    Se impostato, il modello "**" utilizzato in un contesto di espansione del nome file corrisponderà a tutti i file e a zero o più directory e sottodirectory. Se lo schema è seguito da un '/', corrispondono solo directory e sottodirectory.

    Quindi, eseguendo shopt -s globstar stai attivando la funzione e il globstar di Bash opzione che rende **/*php espandi a tutti i .php file nella directory corrente (** corrisponde a 0 o più directory, quindi **/*php corrisponde a ./foo.php anche) che vengono poi grep per string .


Linux
  1. Nozioni di base su Linux:come scaricare file sulla shell con Wget

  2. Come spostare i file e visualizzare l'avanzamento (ad esempio con una barra di avanzamento)?

  3. Come stampare il nome dei file mancanti in una cartella?

  4. Come posso installare l'ultimo Anaconda con wget

  5. Come rimuovere tutti i file che iniziano con una determinata stringa in Linux

Come trovare file in Linux con il comando Trova

Come trovare una stringa o una parola specifica in file e directory

Come modificare ricorsivamente le autorizzazioni dei file in Linux

Come trovare ed elencare in modo ricorsivo i file per data in Linux

Come copiare file con estensione di file specifica in modo ricorsivo

Come trovare file con il comando fd in Linux