• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

alle Ordner und Dateien löschen (mit Ausnahme)

  • Ersteller Ersteller Benutzer 62153
  • Erstellt am Erstellt am

Benutzer 62153

Gast
Ich möchte gerne alles innerhalb eines Ordners löschen, allerdings - falls vorhanden - soll ein Ordner bestehen bleiben. Bisher mache ich es mit rm -rf. Damit werden alle Unterordner gelöscht. Wie kann ich einen Ordner namens XYZ-Ordner ausschliessen?
 
Mir fällt so auf die Schnelle ein:

Entweder mit find...
find PFAD -maxdepth 1 -not -name 'XYZ' -exec rm -rv {} \;

Oder du kannst auch mit RegExp...
rm -rv [^X]* würde alles löschen, außer was mit X anfängt. Kann man natürlich erweitern.

Edit:
Vorsicht: rm -rv [^XYZ]* ignoriert nicht den Ordner "XYZ", sondern jeden Ordner, der entweder mit X, mit Y oder mit Z anfängt.
 
Der erste Befehl geht leider nicht, da der obere Ordner gelöscht wird.

In diesem Beispiel soll Ordner 4 inkl. dessen Inhalt Datei 2 erhalten bleiben. Das heisst natürlich auch, dass Ordner DEL und Ordner 2 nicht gelöscht werden soll, sondern nur der Inhalt ausser Ordner 4 (z.B auch Datei 3). Theoretisch könnten die Ordner auch noch weiter verschachtelt sein. Wichtig ist einfach, sobald der Ordnername auftaucht darf nicht weiter rekursiv gelöscht werden. Trotzdem, alle andern Ordner und Dateien sollen weg. Im Falle, dass der Ordner nicht existiert ist der ganze Ordner DEL weg.

Wichtiger Ordner 1
- Ordner DEL
-- Ordner 1
.. Ordner 2
--- Ordner 4
---- Datei 2

--- Ordner 5
--- Datei 3
-- Datei 1



Den zweiten Befehl verstehe ich nicht. Was macht die Option -rv und wo gebe ich den Pfad an? Könnte ich dort auch ganze Strings angeben?
 
Code:
[SIZE="-2"]ort="/Irgendwo/im Tierpark/am Affengehege";
habitat="Bonobos";

find -dx "${ort}" -not -type d -not -ipath "*/${habitat}/*" -delete;
find -dx "${ort}" -type d -not -ipath "*/${habitat}/*" -not -iname "${habitat}" -exec rmdir {} 2>/dev/null \;;[/SIZE]
 
Zuletzt bearbeitet:
Code:
[SIZE="-2"]ort="/Irgendwo/im Tierpark/am Affengehege";
habitat="Bonobos";

find -dx "${ort}" -not -type d -not -ipath "*/${habitat}/*" -delete;
find -dx "${ort}" -type d -not -ipath "*/${habitat}/*" -not -iname "${habitat}" -exec rmdir {} 2>/dev/null \;;[/SIZE]

Danke, der Befehl funktioniert bestens! Die Bonobos sind gerettet. ;)

Gruss dawiinci