GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je grep filtrer récursivement le nom des fichiers que je veux avec des caractères génériques ?

Utilisez grep est --include choix :

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

Si vous avez une version de grep qui manque le --include option, vous pouvez utiliser ce qui suit. Ils ont tous deux été testés sur une structure de répertoire comme celle-ci :

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

Où tous les .php les fichiers contiennent la chaîne string .

  1. Utilisez find

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

    Explication

    Cela trouvera tous les .php fichiers, puis exécutez grep -H string sur chacun d'eux. Avec find est -exec option, {} est remplacé par chacun des fichiers trouvés. Le -H indique grep pour imprimer le nom du fichier ainsi que la ligne correspondante.

  2. En supposant que vous ayez une version suffisamment récente de bash , utilisez globstar :

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

    Explication

    Comme expliqué dans le manuel bash :

    globstar

    S'il est défini, le modèle "**" utilisé dans un contexte d'extension de nom de fichier correspondra à tous les fichiers et à zéro ou plusieurs répertoires et sous-répertoires. Si le modèle est suivi d'un "/", seuls les répertoires et les sous-répertoires correspondent.

    Donc, en exécutant shopt -s globstar vous activez la fonctionnalité andBash's globstar option qui fait **/*php étendre à tous les .php fichiers dans le répertoire courant (** correspond à 0 ou plusieurs répertoires, donc **/*php correspond à ./foo.php ainsi) qui sont ensuite grep pour string .


Linux
  1. Comment imprimer le nom des fichiers manquants dans un dossier ?

  2. Comment puis-je changer le nom de plusieurs fichiers dans un dossier ?

  3. Comment puis-je grep récursivement?

  4. Comment puis-je exécuter du code PHP à partir de la ligne de commande ?

  5. Trouver tous les fichiers dont le nom contient une chaîne

Comment rechercher des fichiers sous Linux avec la commande Find

Comment trouver une chaîne ou un mot spécifique dans les fichiers et les répertoires

Comment modifier récursivement les autorisations de fichiers sous Linux

Comment rechercher et répertorier récursivement les fichiers par date sous Linux

Comment copier des fichiers avec une extension de fichier spécifique de manière récursive

Comment rechercher des fichiers avec la commande fd sous Linux