Ich habe mehrere Dateien mit dem gleichen Basisdateinamen. Ich möchte alle bis auf einen entfernen
foo.org #keep
foo.tex #delete
foo.fls #delete
foo.bib #delete
etc
Wenn ich keinen behalten müsste, könnte ich ihn gebrauchen rm foo.*
.
TLDP zeigt ^
, dass eine Übereinstimmung annulliert wird . Durch Versuch und Irrtum konnte ich das herausfinden
rm foo.*[^org]
tut was ich brauche, aber ich verstehe die Syntax nicht wirklich.
Auch wenn dies in meinem Anwendungsfall keine Einschränkung darstellt, denke ich, dass dieses Muster auch foo.o
und ignoriert foo.or
. Wie funktioniert dieses Muster und wie würde ein Globus, der ignoriert, nur foo.org
aussehen?
Regular Expression
. Sie sollten mit Ihren Gruppierungszeichen vorsichtig sein. Mit Hilfe von Klammern haben Sie eine Zeichenklasse angegeben, die bedeutet, dass Sie alle Dateien löschen, die eine Erweiterung mit den Buchstaben haben o
, r
oder g
in beliebiger Reihenfolge. Verwenden Sie Klammern, um eine Gruppe zu erstellen und die Reihenfolge der Zeichen beizubehalten.
foo.*[^org]
stimmt mit jedem Dateinamen überein, der foo.
mit einem oder mehreren Zeichen nach dem Punkt beginnt, wobei das letzte Zeichen nicht o, r oder g ist. Also würde es passen foo.orb
, aber nicht foo.org
oder foo.or
oder foo.o
. Die Antwort von GlennJackman zeigt, wie erweiterte Mustervergleichsfunktionen zum Negieren einer Übereinstimmung aktiviert werden.
rm foo.*[^org]
entfernt alle Dateien , die letzten Zeichen sind wedero
,r
oderg
, sofoo.foo
würde entweder nicht überein.