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.ound 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, roder gin 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.orgoder foo.oroder 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,roderg, sofoo.foowürde entweder nicht überein.