Ich habe diese Verzeichnisstruktur:
~/tmp/globstar ɀ find dir -type f
dir/file.ext
dir/subdir1/file.ext
dir/subdir2/file.ext
globstar
Wenn die Option in Bash aktiviert ist, kann ich sagen:
~/tmp/globstar ɀ ls -1 dir/**/*.ext
dir/subdir1/file.ext
dir/subdir2/file.ext
Meine Frage ist: Warum ist dir/file.ext
von dieser Liste ausgeschlossen?
Bash-Handbuch sagt dies über globstar
:
Wenn festgelegt, stimmt das in einem Dateinamenerweiterungskontext verwendete Muster '**' mit allen Dateien sowie mit null oder mehr Verzeichnissen und Unterverzeichnissen überein. Wenn dem Muster ein '/' folgt, stimmen nur Verzeichnisse und Unterverzeichnisse überein.
" Null " in diesem Absatz lassen Sie mich mit dem Eindruck, der dir/file.ext
hätte einbezogen werden sollen; es sei denn, ich vermisse hoffentlich etwas.
ɀ
?unicode ɀ
oder Wikipediaɀ
ist nur ein Zeichen, das hier verwendet wird, um die Eingabeaufforderung zu unterscheiden. Einige Benutzer bevorzugen den Charakter£
oder€
anstelle von$
:). Ursprünglich wurdeɀ
ein 'Antworten:
Ich denke, das bezieht sich nur auf die Unterverzeichnisebene.
**
ohne/
Streichhölzeralle Dateien und Verzeichnisse
null oder mehr Unterverzeichnisse
Es verschwindet aber nicht ganz.
**/
bedeutet, dass keine Dateien in dem Verzeichnis der höchsten Ebene, auf das sich**
bezieht, abgeglichen werden.Du brauchst
dir/*.ext dir/**/*.ext
.quelle
Dies funktioniert wie erwartet in diesen Versionen von Bash, die mit den aufgeführten Distributionen geliefert werden:
In der Tat sind die oben aufgeführten Versionen alles, was ich getestet habe. Mit anderen Worten, ich habe keine Version 4 von Bash gefunden, in der es nicht funktioniert. Die Option
globstar
wurde in Bash 4.0 hinzugefügt, siehe ÄNDERUNGEN . In älteren Versionen sollte der Befehlshopt -s globstar
einen Fehler zurückgeben.Tests
1.
dir/**/*.ext
Übereinstimmungendir/file.ext
:2.
**/*.ext
Übereinstimmungenfile.ext
:Vorbereiten der Umgebung für die Reproduktion der obigen Tests:
quelle
shopt -s globstar
.Ich sehe aus, als hättest / hättest du Globstar ausgeschaltet. Es kann folgendermaßen eingeschaltet werden:
Es werden nicht nur keine null Unterverzeichnisse gefunden, sondern auch keine zwei Unterverzeichnisse:
Wenn globstar ausgeschaltet ist, verhält sich ** genau wie * und
dir/**/*.ext
erhält das gleiche Ergebnis wiedir/*/*.ext
das bringt mich manchmal dazu zu denken, dass globstar an ist
Überprüfen Sie Ihre aktuelle Globstar-Einstellung wie folgt:
quelle
shopt globstar
.