Entfernen Sie alle Dateien außer einer mit rm

10

Gibt es eine Möglichkeit, alle Dateien in einem Verzeichnis zu entfernen, außer einer mit einem bestimmten Dateinamen? Zum Beispiel hatte , wenn ich ein Verzeichnis für die Dateien enthält file1, file2und dontdelete. Gibt es eine Möglichkeit, schnell zu löschen file1, file2und nicht dontdelete? Ich weiß, dass ich es einfach tun könnte, rm file1 file2aber das würde für eine Reihe von Dateien nicht funktionieren. Außerdem bin ich unter Mac OS X, wenn das einen Unterschied macht.

Wuffers
quelle
Einfaches Platzhalterzeichen kann Ihre Lösung sein: rm file * entfernt Datei1 und Datei2, löscht jedoch nicht. Wenn Ihre Anforderungen komplexer sind, können Sie abhängig von der Shell-Skriptsprache eine Liste der Dateien erstellen, die Sie mit einem regulären Ausdruck löschen möchten, und diese an den Befehl rm weiterleiten.
Therobyouknow
@Rob: Ja, meine Situation ist komplexer. Und Ignacios Antwort funktionierte. Trotzdem danke!
Wuffers

Antworten:

16

In Bash:

shopt -s extglob
rm !(dontdelete)
Ignacio Vazquez-Abrams
quelle
1
+1 Wow sehr prägnante Lösung. Ich werde das berücksichtigen, wenn ich es brauche.
Therobyouknow
kann dies erweitert werden, um mehrere Verzeichnisse
einzuschließen