Page 1 of 1

Komplement einer Menge bilden mit Wildcards

Posted: 10. Jan 2007 19:26
by felixxx
Ich habe in einem Verzeichnis viele Dateien, darunter viele mit verschiedenen Dateiendungen (also .log, .tex, .toc, .ps, .pdf, .dvi, etc... ). Ich möchte alle Dateien löschen, nur nicht die *.tex Dateien. Gibt es dafür einen Befehl, der Wildcards benutzt? Also so etwas wie
rm ^{*.tex}
oder ähnliches?
Wer weiss darauf eine Antwort?

Posted: 11. Jan 2007 0:08
by Lateralus
Notfalls so:

Code: Select all

#!/bin/sh
for file in *; do
  if [ "${file%%*.tex}" ]; then
    rm "$file"
  fi
done
Bitte vorher testen!

Posted: 11. Jan 2007 9:51
by felixxx
Danke,

was ich aber eigentlich erwartet habe, ist ein einzeiliger befehl, das muss doch irgendwie gehen, oder? wenn ich eine Menge angebe, also *.tex für alle latex-dateien, dann muss es doch möglich sein, diesen ausdruck zu negieren und somit die komplementmenge zu bezeichnen, weiss das jemand?

also so etwas wie rm neg(*.tex) ??

Posted: 11. Jan 2007 11:24
by tom servo

Code: Select all

rm `ls | grep -iv -e .tex -e .pdf`
Müsste funktionieren.... löscht alle nicht pdf- und tex-Dateien. Der Code sieht aber ziemlich grausam aus. ;-)

Edit: Falls du wie ich, latex mit einem Makefle klöppelst, sollte da vermutlich noch .jpg .png usw mit rein. :D

cu

Posted: 11. Jan 2007 11:27
by Janka

Code: Select all

$ man find
...
$ find -not -name '*.tex' -exec rm {} \;
Janka