(13 Antworten)
Vor 5 Jahren geschlossen.
Hier ist die Situation.
Ich habe ein Verzeichnis, das viele Dateien mit unterschiedlichen Erweiterungen enthält. Ich möchte alle Dateien außer einer mit einem bestimmten Namen löschen.
Dies kann einfach über die GUI erfolgen, indem Sie alle auswählen und Strg drücken und Abwählen der betreffenden Datei.
Das ist genau das, was ich will, aber wie kann ich das von der Kommandozeile aus machen?
Zum Beispiel: dirA enthält die folgenden Dateien:
a.txt
b.txt
c.php
d.html
a.db
b.db
e.html
Ich möchte alle Dateien löschen und nur die Datei mit dem Namen a.txt
behalten .
Beste Antwort
Ich habe diesen einfachen, großartigen Befehl mitgebracht:
rm !(a.txt)
Sie können verwenden! als Negation
Testen Sie den Glob zuerst mit Echo, dh
echo !(a.txt)
Wenn es nicht funktioniert, für bash
Sie müssen dies möglicherweise mit
shopt -s extglob
Wenn Sie beide behalten wollten a.txt
und b.txt
, können Sie !(a.txt|b.txt)
verwenden oder !([ab].txt)
.
Bearbeiten:
um rm
zu machen Wenn Sie rekursiv arbeiten, fügen Sie einfach -r
hinzu wie
rm -r !(a.txt)
und es funktioniert auch mit Ordnern. Sie müssen nur den Namen in den Verzeichnisnamen ändern, z. B. für a_dir
rm -r !(a_dir)