Wie lösche ich alle bis auf eine Datei in Unix? [Duplikat]


Antworten:


20
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

Wollte mit find sehr ähnlich vorgehen, aber deine funktioniert und du warst schneller. +1
Rory Alsop

2
Dies schlägt fehl, wenn Sie Dateien mit Leerzeichen im Namen haben.
Mat

Um mit Dateinamen mit Leerzeichen ls -1 | grep -v do_not_delete | xargs -I files rm "files"
umzugehen,

8

Angenommen, Sie verwenden die Bash-Shell (der gängigste Fall), können Sie das Negationsglobbing-Symbol (Pfadnamenerweiterung) verwenden:

rm -rf !(myfile.txt)

Dies verwendet erweitertes Globbing, daher müssten Sie dies zuerst aktivieren:

shopt -s extglob

1
 cp myfile.txt somewhere_else;
 rm -rf *
 cp somewhere_else/myfile.txt .

1
ln myfile.txt .myfile.txt && rm -rf * && mv .myfile.txt myfile.txt


0

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).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.