Wie kann ich alle Dateien in meinem Ordner, außer Musik -subfolder löschen?

StackOverflow https://stackoverflow.com/questions/453581

  •  19-08-2019
  •  | 
  •  

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.

War es hilfreich?

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öschen
rm -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 des ls auf diese Weise umgeleitet wird, druckt Dateinamen einen pro Zeile, anstatt in einem Spaltenformat, wie Sie sehen würden, wenn Sie ls 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 in grep -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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top