Bash:alle Dateien löschen,die nicht auf .tex enden

Hi,

wie kann ich in der Konsole Dateien löschen, die nicht eine bestimmte Endung haben?
Mein Ansatz lautete

$ rm \*[!tex]

, was auch prinzipiell funktioniert; allerdings werden so Dateien mit der Endung .aux und .toc auch nicht gelöscht.

Nun noch die Masterfrage: Warum funktioniert

$ rm \*.[!tex]

nicht, sondern bricht mit der Fehlermeldung

rm: Entfernen von „\*.[tex]“ nicht möglich: Datei oder Verzeichnis nicht gefunden

ab?

Danke und Gruß,
V.

Hi!

Nun noch die Masterfrage: Warum funktioniert

$ rm
*.[!tex]

nicht, sondern bricht mit der
Fehlermeldung

rm: Entfernen von „*.[tex]“ nicht
möglich: Datei oder Verzeichnis nicht gefunden

ab?

Weil in den eckigen Klammern keine Zeichen kette , sondern eine Zeichen menge steht. Und Du hast offensichtlich keine Dateien, die auf „.t“, „.e“ oder „.x“ enden - zum Glück, denn die wären jetzt weg. „[tex]“ (oder „[etx]“) steht für genau ein Zeichen, das ein „x“, „e“ oder ein „t“ sein kann.

Major

Hi Vladimir

wie kann ich in der Konsole Dateien löschen, die nicht eine
bestimmte Endung haben?
Mein Ansatz lautete

$ rm *[!tex]

, was auch prinzipiell
funktioniert; allerdings werden so Dateien mit der Endung .aux
und .toc auch nicht gelöscht.

warum das nicht funktionieren kann, wurde in der ersten antwort schon erläutert. so aus dem bauch sollte

$ rm `ls | grep -e "tex$"`

funktionieren, aber es gibt bestimmt wesentlich elegantere ansätze.

HTH und Gruss
Sam

so aus dem bauch sollte

$ rm ls | grep -e "tex$"

funktionieren,

Nicht, dass ich kleinlich erscheinen will. Aber hier fehlt die Negation, $ rm ls | grep -v -e "tex$" dürfte der ursprünglichen Intention näherkommen.

Gruss
Schorsch

Nicht, dass ich kleinlich erscheinen will. Aber hier fehlt die
Negation, $ rm ls | grep -v -e "tex$" dürfte der
ursprünglichen Intention näherkommen.

oops:smile:

Dankeschön und Gruss
Sam