Wie kann ich alle Dateien in meinem Ordner, außer Musik -subfolder löschen?
Frage
Duplizieren
kann nicht alles andere in einem Ordner entfernen, außer FileA
Ich denke, dass es etwas ähnlich wie das ist: löschen [^ Musik]
Es ist jedoch nicht funktioniert.
Lösung
Setzen Sie den folgenden Befehl in Ihre ~ / .bashrc
shopt -s extglob
Sie können nun alles andere im Ordner außer dem Ordner Musik von
löschenrm -r !(Music)
Bitte, mit dem Befehl vorsichtig sein. Es ist mächtig, aber auch gefährlich.
Ich empfehle es zu testen, immer mit dem Befehl
echo rm -r !(Music)
Andere Tipps
Der Befehl
rm (ls | grep -v '^Music$')
sollte funktionieren. Wenn einige Ihrer „Dateien“ auch Unterverzeichnisse sind, dann sollten Sie sie rekursiv löschen, zu:
rm -r (ls | grep -v '^Music$')
Warnung : rm -r
kann gefährlich sein und Sie könnten versehentlich eine Menge von Dateien löschen. Wenn Sie möchten, um zu bestätigen, was Sie können zu löschen, versuchen Sie am Ausgang der Suche
ls | grep -v '^Music$'
Erklärung :
- Der
ls
Befehlslisten Verzeichnisinhalt; ohne Argument, wird standardmäßig das aktuelle Verzeichnis. - Das Pipesymbol
|
leitet die Ausgabe an einen anderen Befehl; wenn der Ausgang desls
auf diese Weise umgeleitet wird, druckt Dateinamen einen pro Zeile, anstatt in einem Spaltenformat, wie Sie sehen würden, wenn Siels
an einem interaktiven Terminal eingeben. - Die
grep
Befehl Streichhölzer Linien für Muster; die-v
Schalter bedeuten Linien zu drucken, die nicht das Muster entspricht. - Das Muster
^Music$
eine Linie, beginnend und endend mit Musik entsprechen - das heißt, nur die Zeichenfolge Musik; die Wirkung des^
(Anfang der Zeile) und$
(Ende der Zeile) Zeichen kann auch mit dem-x
Schalter, wie ingrep -vx Music
erreicht werden. - Die Syntax
command (subcommand)
ist der Weg der Fische der Ausgabe eines Befehls zu nehmen und es über als Befehlszeilenargumente zu einem anderen übergeben. - Der
rm
Befehl entfernt Dateien. Standardmäßig wird es nicht entfernen, Verzeichnisse, aber die-r
( „rekursiv“) Option ändert das.
Sie können über diese Befehle lernen und mehr von man command
eingeben, wo command
ist das, was Sie lernen wollen.
Also ich suchte überall nach einer Möglichkeit, alle Dateien in einem Verzeichnis zu entfernen, außer für einige Verzeichnisse und Dateien, wollte ich um halten. Nach langer Suche erdacht ich einen Weg, es zu benutzen finden tun.
find -E . -regex './(dir1|dir2|dir3)' -and -type d -prune -o -print -exec rm -rf {} \;
Im Wesentlichen verwendet es regex die Verzeichnisse auszuwählen aus den Ergebnissen auszuschließen dann die restlichen Dateien entfernt. Ich wollte nur hier, falls jemand löschte es sonst erforderlich ist.