Ist es möglich, eine bestimmte Datei oder ein bestimmtes Verzeichnis in ls oder beim Datei-Globbing zu ignorieren?

Ist es möglich, eine bestimmte Datei oder ein bestimmtes Verzeichnis in ls oder beim Datei-Globbing zu ignorieren?

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/abcDatei wird ignoriert. Ähnliches ls -lR . | grep -v abcfunktioniert 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

verwandte Informationen