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

Wie öffnet oder listet man alle Dateien auf, deren Name mit zwei Mustern in Bash übereinstimmt?

Angenommen, ich habe ein Verzeichnis mit Tausenden von Dateien; wie könnte ich alle Dateien öffnen, deren Name sowohl die Zeichenketten „rot“ als auch „grün“ enthält?

Akzeptierte Antwort:

(Angenommen, Sie suchen nach Dateinamen die beide enthalten die Zeichenfolge „rot“ und die Zeichenfolge „grün“)

Bash sinnlos zum Testen von Dateinamen gegen „rot“ und „grün“ zu verwenden, indem =~ verwendet wird Übereinstimmungsoperator für reguläre Ausdrücke:

for f in *
do
  [[ $f =~ red && $f =~ green ]] && echo Bash: yes: "$f" || echo Bash: no: "$f"
done

So verwenden Sie die Standard-Shell-Syntax mit case und Globs, um dieselben Dateien zu finden:

for f in *
do 
  case "$f" in
    *green*red*|*red*green*) echo Case: yes: $f;; 
    *) echo Case: no: $f;; 
  esac
done

Noch einfacher, mit dem Globbing Ihrer Shell:

printf "Glob: %sn" *green*red* *red*green*

Beispiellauf:

$ touch a b aredgreenb agreenredb agreenbred aredbgreen red green redgreen greenred

$ for f in *
>     do
>       [[ $f =~ red && $f =~ green ]] && echo Bash: yes: "$f" || echo Bash: no: "$f"
>     done
Bash: no: a
Bash: yes: agreenbred
Bash: yes: agreenredb
Bash: yes: aredbgreen
Bash: yes: aredgreenb
Bash: no: b
Bash: no: green
Bash: yes: greenred
Bash: no: red
Bash: yes: redgreen


$ for f in *
>     do
>       case "$f" in
>         *green*red*|*red*green*) echo Case: yes: $f;;
>         *) echo Case: no: $f;;
>       esac
>     done
Case: no: a
Case: yes: agreenbred
Case: yes: agreenredb
Case: yes: aredbgreen
Case: yes: aredgreenb
Case: no: b
Case: no: green
Case: yes: greenred
Case: no: red
Case: yes: redgreen

$ printf "Glob: %sn" *green*red* *red*green*
Glob: agreenbred
Glob: agreenredb
Glob: greenred
Glob: aredbgreen
Glob: aredgreenb
Glob: redgreen

Linux
  1. So finden Sie die Liste aller offenen Ports in Linux heraus

  2. So listen oder sortieren Sie alle Dateien nach Größe in Linux

  3. Alle Dateien in einem Verzeichnis löschen, dessen Name nicht mit einer Zeile in einer Dateiliste übereinstimmt?

  4. Wie listet man alle Dateien auf, die von einem Apt-Paket installiert wurden?

  5. Wie man alle Dateien und Verzeichnisse rekursiv auflistet

So listen Sie alle Datenbanken in PostgreSQL auf

So lesen Sie Dateien Zeile für Zeile in Bash

So listen Sie alle angemeldeten Benutzer auf

Wie listet man alle Dateien in Linux nach Größe sortiert auf?

So konvertieren Sie Textdateien in Groß- oder Kleinbuchstaben

So komprimieren Sie alle Dateien in allen Unterverzeichnissen in eine komprimierte Datei in Bash