ftblog

:: widerstand zwecklos ::
email jabber gpgkey
hackergotchi

May 02, 2011

zsh: programmierbares globbing

Filed under: computer -- 20:30

Mika fragte neulich, ob zsh-Globbing es zuläßt Dateien *.foo auszuwählen zu
denen keine *.bar Datei existiert. Klar gibt's das.

% touch abc.{foo,bar} def.foo
% print -l *.foo(e,'[[ ! -e ${REPLY:r}.bar ]]',)
def.foo

Nun mag man sagen, daß das häßlich ist und niemand das tippen wollen
würde. Da stimme ich zu. Geht auch kürzer.

Bei Mika ging es darum .changes Dateien zu finden, zu denen es keine .upload
Datei gibt. Debian Kram. Wissenschon. Da kann dann zu einer Datei
`foo.changes' zum Beispiel eine Datei `foo.ftp-master.upload' gehören.

% function MC() {
[[ \! -e ${REPLY:r}.${MTAG-ftp-master.}${MSUFF:-upload} ]] ]]
}
% print -l *.changes(+MC)

Das ganze ist über `$MTAG' und `$MSUFF' konfigurierbar. Standardmäßig ist
ersteres "ftp-master." und letzteres "upload". Mit anderen Worten: Würde man

% MTAG=''
% print -l *.changes(+MC)

...machen, würden alle "*.changes" gelistet zu denen es kein "*.upload"
gibt. Analog kann man nun MTAG="ftp-slave." setzen wenn man nach "*.changes"
suchen will für die "*.ftp-slave.upload" nicht existiert.

Das sollte einmal einen Startpunkt in diese Art von Globbing sein. Man passe
das an, bis es einem gefällt. Dokumentiert ist das ganze in `zshexpn(1)'.
Man suche mal nach "+nt" (je nach $PAGER wird man das `+' escapen müssen).

Powered by zblog
valid css | valid xhtml | utf-8 encoded | best viewed with anybrowser