Ich habe Probleme mit dem Befehl ls, dem Dateiglobbing und dem Befehl grep. Betrachten Sie den folgenden Datei-/Verzeichnisbaum.
abc/
def
ghi.txt
jkl
def/
f01
abc
abc.txt
ghi.txt
Angenommen, ich möchte das Verzeichnis abc/ vollständig ignorieren und alles andere melden. Beim Versuch ls -lR -Iabc .
wird die Datei /def/abc.txt zwar gemeldet, aber die /def/abc
Datei wird ignoriert. Ähnliches ls -lR . | grep -v abc
funktioniert hier auch nicht. Gibt es eine Möglichkeit, das, was ich möchte, in Bash zu tun?
Alternativ nehmen wir an, dass ich ignorieren ghi.txt
, aber melden möchte abc/ghi.txt
. Gibt es eine Möglichkeit, dies in Bash zu tun?
Antwort1
Wenn in Bash erweitertes Globbing aktiviert ist, können Sie !(abc) verwenden, um das Verzeichnis umgekehrt abzugleichen abc
. Beispiel:
$ tree
.
├── abc
│ ├── def
│ ├── ghi.txt
│ └── jkl
├── def
│ ├── abc
│ ├── abc.txt
│ └── f01
└── ghi.txt
2 directories, 7 files
Und
$ shopt extglob
extglob on
Dann
$ ls !(abc)
ghi.txt
def:
abc abc.txt f01