Wie kann ich alle Dateien außer einer aus einem Verzeichnis löschen?

Wie kann ich alle Dateien außer einer aus einem Verzeichnis löschen?

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 findBefehl 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

  1. Verschieben Sie die Datei, die Sie beibehalten möchten, an einen Ort außerhalb des Verzeichnisses
  2. Entfernen Sie alles im Verzeichnis mit Ihrer bevorzugten Methode
  3. 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$'`

verwandte Informationen