Mögliches Duplikat:
Wie lösche ich alle Dateien in einem Verzeichnis mit Ausnahme einiger?
Wie lösche ich alle bis auf eine (oder einige) Datei in Unix?
Etwas wie
rm -rf -ignore myfile.txt *
Mögliches Duplikat:
Wie lösche ich alle Dateien in einem Verzeichnis mit Ausnahme einiger?
Wie lösche ich alle bis auf eine (oder einige) Datei in Unix?
Etwas wie
rm -rf -ignore myfile.txt *
Antworten:
ls * | grep -v dont_delete_this_file | xargs rm -rf
Beispiel:
mkdir test && cd test
touch test1
touch test2
touch test3
touch test4
touch test5
So entfernen Sie alle Dateien außer 'test2':
ls * | grep -v test2 | xargs rm -rf
Dann lautet die Ausgabe von 'ls':
test2
BEARBEITEN:
Danke für den Kommentar. Wenn das Verzeichnis einige Dateien mit Leerzeichen enthält:
mkdir test && cd test
touch "test 1"
touch "test 2"
touch "test 3"
touch "test 4"
touch "test 5"
Sie können (mit Bash) verwenden:
rm !("test 1"|"test 4")
'ls' Ausgabe:
test 1
test 4
ls -1 | grep -v do_not_delete | xargs -I files rm "files"
Diese Seite bietet je nach Shell verschiedene Optionen: http://www.unix.com/unix-dummies-questions-answers/51400-how-remove-all-except-one-file.html
Für ein rekursives rmVerfahren müssen Sie die Rekursion mit findden Dateien durchführen und diese ausschließen, die Sie behalten möchten (oder grep, aber dies kann zu Problemen mit Leerzeichen führen). Bei einem Shell-Glob haben moderne Shells Glob-Muster, mit denen Dateien ausgeschlossen werden können. Dies kann mit einer Glob-Rekursion auf Shell-Ebene kombiniert werden, sofern verfügbar (z. B. zshhat rm **/*~foo/bar- Beachten Sie, dass dies wahrscheinlich zu Längenbeschränkungen für Argumente bei großen Verzeichnisbäumen führt).