Ich versuche Dateien mit einer bestimmten Erweiterung im aktuellen Verzeichnis (".") und in einem Unterverzeichnis per Globbing zu erfassen, aber irgendetwas muss ich übersehen, denn es funktioniert nicht:
Versuchsaufbau:
1 2 3 4 5 6 7 8 9 10 | $ mkdir d e $ touch a.{txt,foo} d/b.{txt,bar} $ find . ./d ./d/b.txt ./d/b.bar ./e ./a.txt ./a.foo |
Ich hatte erwartet, dass das funktioniert:
1 2 | $ echo @(.|d)/*.@(txt|foo) d/b.txt |
Erwartet wäre zusätzlich die Ausgabe "./b.txt". So geht es:
1 2 | $ echo {.,d}/*.@(txt|foo) ./a.foo ./a.txt d/b.txt |
Aber dieser Ansatz hat den Nachteil, das das Muster ohne "nullglob" stehen bleibt, falls kein Dateiname erfasst wird:
1 2 | $ echo {.,d}/*.@(bar|abc) ./*.@(bar|abc) d/b.bar |
Aber warum funktioniert der andere Ansatz nicht? shopt -s extglob ist da und der Absatz "Pattern Matching" der Manpage von bash erwähnt eine spezielle Behandlung von ".", aber das Verhalten ändert sich nicht, egal, ob "dotglob" eingeschaltet ist oder nicht, obwohl mit "dotglob" eingeschaltet Dateinamen mit führendem Punkt erfasst werden müssten. Hat jemand eine Erklärung?