Ich muss alle Dateien bis auf eine (der Name ist definiert) aus einem bestimmten Verzeichnis löschen.
Wie kann ich dies vom Terminal in OS X aus tun? Kann ich dies mit einem einzigen Befehl tun?
Antwort1
shopt -s extglob && rm !(non_delete_file)
oder
rm -f !(non_delete_file)
oder
find . ! -name non_delete_file -delete
Beachten Sie, dass der obige find
Befehl rekursiv funktioniert – er löscht alle Dateien und Verzeichnisse im aktuellen Verzeichnis und in allen Unterverzeichnissen. Wenn das ein Problem ist, verwenden Sie -type f
(um nur Dateien abzugleichen) und -maxdepth 1
(um nur Dinge im aktuellen Verzeichnis abzugleichen und Unterverzeichnisse zu ignorieren).
find . -type f -maxdepth 1 ! -name non_delete_file -delete
Antwort2
- Verschieben Sie die Datei, die Sie beibehalten möchten, an einen Ort außerhalb des Verzeichnisses
- Entfernen Sie alles im Verzeichnis mit Ihrer bevorzugten Methode
- Verschieben Sie die Datei, die Sie beibehalten möchten, zurück in das Verzeichnis
Dies ist zwar nicht gerade Hightech, aber mit diesem Ansatz ist es wesentlich schwieriger, die Datei, die Sie behalten möchten, versehentlich zu löschen.
Offensichtlich schlägt dieser Ansatz fehl, wenn die Datei während des gesamten Chaos dauerhaft im Verzeichnis vorhanden sein muss.
Antwort3
Versuchen
rm `ls | grep -v '^defined$'`