GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich den Namen der gewünschten Dateien mit Platzhaltern rekursiv filtern?

Verwenden Sie grep ist --include Möglichkeit:

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

Wenn Sie eine Version von grep haben dem fehlt die --include Option können Sie Folgendes verwenden. Diese wurden beide auf einer Verzeichnisstruktur wie dieser getestet:

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

Wo alle .php Dateien enthalten die Zeichenfolge string .

  1. Verwenden Sie find

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

    Erklärung

    Dadurch werden alle .php gefunden Dateien und führen Sie dann grep -H string aus auf jedem von ihnen. Mit find ist -exec Option, {} wird durch jede der gefundenen Dateien ersetzt. Die -H sagt grep um den Dateinamen sowie die übereinstimmende Zeile zu drucken.

  2. Angenommen, Sie haben eine ausreichend neue Version von bash , verwenden Sie globstar :

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

    Erklärung

    Wie im Bash-Handbuch erklärt:

    globstar

    Wenn gesetzt, stimmt das Muster „**“, das in einem Dateinamenerweiterungskontext verwendet wird, mit allen Dateien und null oder mehr Verzeichnissen und Unterverzeichnissen überein. Wenn auf das Muster ein „/“ folgt, stimmen nur Verzeichnisse und Unterverzeichnisse überein.

    Also durch Ausführen von shopt -s globstar Sie aktivieren die Funktion und Bashs globstar Option, die **/*php macht Erweitern auf alle .php Dateien im aktuellen Verzeichnis (** stimmt mit 0 oder mehr Verzeichnissen überein, also **/*php stimmt mit ./foo.php überein auch), die dann nach string gegrepped werden .


Linux
  1. Wie verschiebt man Dateien und zeigt den Fortschritt an (z. B. mit einem Fortschrittsbalken)?

  2. Wie kann ich den Namen vieler Dateien in einem Ordner ändern?

  3. Wie kann ich die Größe von Dateien und Verzeichnissen in Linux sehen?

  4. So entfernen Sie alle Dateien, die mit einer bestimmten Zeichenfolge in Linux beginnen

  5. Wie kann ich Dateien standardmäßig mit rsync ausschließen?

So finden Sie Dateien in Linux mit dem Find-Befehl

So finden Sie eine bestimmte Zeichenfolge oder ein bestimmtes Wort in Dateien und Verzeichnissen

So ändern Sie die Dateiberechtigungen in Linux rekursiv

So finden und listen Sie die Dateien rekursiv nach Datum in Linux auf

So kopieren Sie Dateien mit einer bestimmten Dateierweiterung rekursiv

So finden Sie Dateien mit dem fd-Befehl in Linux