Angenommen, ich habe die folgenden Dateien:
|-- bar `-- foo |-- type_A_1 |-- type_A_2 |-- type_B_1 |-- type_B_2 |-- type_B_xx |-- type_B_xx `-- something_else
Ich dachte den folgenden Befehl
print -l foo/*~{type_B*}
drucke alles unter foo
außer den Dingen, die damit beginnen type_B
, aber nicht, stattdessen druckt es alles unter foo:
foo/type_A_1
foo/type_A_2
foo/type_B_1
foo/type_B_2
foo/type_B_xx
foo/something_else
Ich habe es auch versucht print -l foo/*~type_B
und das Gleiche bekommen.
Wie funktioniert der Platzhalter für Ausnahmen ~
in zsh?
shell-script
zsh
wildcards
Amelio Vazquez-Reina
quelle
quelle
foo/*~*/type_A*
funktioniert?*
Erweitert der zweite Ordner auf jeden Ordner im Arbeitsverzeichnis oder ist er intelligent genug, um nur auf diesen Ordner zu erweiternfoo
?print *~**/*
im/
Verzeichnis laufen ), gehe ich davon aus, dass es zuerst das erste Muster erweitert und dann alle Übereinstimmungen entfernt, die zum Ausschlussmuster passen.~
ist rein textuell, der Teil vor dem~
erweitert sich wie immer, dann stimmt der Teil nach dem Entfernen überein. @Jofel Ein besserer Test wäreprint /**/*~*
: Sie können beobachten, dass er den gesamten Baum durchläuft, auch wenn er am Ende nichts druckt .zsh hat den
^
Glob-Operator, wenn EXTENDED_GLOB aktiviert ist. Es scheint die perfekte Lösung für Ihre Situation zu sein:Es bedeutet „Alles abgleichen, außer dem, was mit dem folgenden Muster übereinstimmt“, aber seine Wirkung ist auf den Teil des Musters zwischen Schrägstrichen oder zwischen dem Anfang des Musters und dem ersten Schrägstrich oder (wie in diesem Fall) zwischen dem letzten begrenzt Schrägstrich und das Ende des Musters.
Sie können die zsh- Optionen anzeigen, die derzeit aktiviert sind mit:
Und deaktiviere EXTENDED_GLOB mit:
quelle