2016-10-05 9 views
0

Ich möchte alle einfachen Dateien auflisten, die keine Python-Skripte in zsh sind. Warum funktioniert der folgende "Code" nicht und was ist die richtige Lösung?Globbing funktioniert nicht wie erwartet

ls -l *(.)~*.py 

UPDATE:

Ich habe setopt extended_glob in meinem .zshrc. Und

ls -ld *~*.py`` 

funktioniert wie erwartet. (Ich habe die -d in den Befehl hinzugefügt, um zu verhindern, dass Verzeichnisse erweitert werden).

+0

Haben Sie die 'EXTENDED_GLOB' Option, die für' ~ 'benötigt wird? – chepner

+0

Danke für die Nachfrage. Die Frage ist aktualisiert. – mcocdawc

Antwort

2

Das Problem ist, dass ~ ist ein glob Operator (die auch erfordert EXTENDED_GLOB gesetzt werden), während (.) a glob ist Qualifier, was bedeutet, es bis zum Ende des gesamten Musters hinzugefügt werden muß, verwendet wird, nicht in die Mitte. Verwenden Sie

ls *~*.py(.) 

stattdessen. Das heißt, *~*.py ist Ihr Muster (alle Dateien enden nicht in .py) und (.) wird auf die Ergebnisse angewendet. (Vielleicht noch eine andere Möglichkeit, um zu sagen, dass Glob-Operatoren nur an unqualifizierten Mustern arbeiten können.)

+2

Beachten Sie auch, dass Sie dieses Muster auf '^ * .py (.)' Verkürzen – okapi

Verwandte Themen