Komplement einer Menge bilden mit Wildcards

Antworten
Nachricht
Autor
felixxx
Beiträge: 2
Registriert: 10. Jan 2007 19:17

Komplement einer Menge bilden mit Wildcards

#1 Beitrag von felixxx » 10. Jan 2007 19:26

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?

Benutzeravatar
Lateralus
prolinux-forum-admin
Beiträge: 1238
Registriert: 05. Mai 2004 7:35

#2 Beitrag von Lateralus » 11. Jan 2007 0:08

Notfalls so:

Code: Alles auswählen

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

felixxx
Beiträge: 2
Registriert: 10. Jan 2007 19:17

#3 Beitrag von felixxx » 11. Jan 2007 9:51

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) ??

tom servo
Beiträge: 225
Registriert: 01. Jun 2004 9:36

#4 Beitrag von tom servo » 11. Jan 2007 11:24

Code: Alles auswählen

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
Zuletzt geändert von tom servo am 11. Jan 2007 11:31, insgesamt 1-mal geändert.

Benutzeravatar
Janka
Beiträge: 3585
Registriert: 11. Feb 2006 19:10

#5 Beitrag von Janka » 11. Jan 2007 11:27

Code: Alles auswählen

$ man find
...
$ find -not -name '*.tex' -exec rm {} \;
Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

Antworten