Frage

Ich weiß, das alles in einem Unterverzeichnis löschen wird und darunter:

rm -rf <subdir-name>

Aber wie löschen Sie alles, was im aktuellen Verzeichnis sowie alle Unterverzeichnisse darunter und den Inhalt aller diesen Unterverzeichnisse?

War es hilfreich?

Lösung

Praxis sichere Umgang mit Computern. steigen Sie einfach eine Ebene in der Hierarchie und keine Wildcard-Ausdruck verwenden:

cd ..; rm -rf -- <dir-to-remove>

Die beiden Striche -- zu sagen, dass rm <dir-to-remove> ist keine Befehlszeilenoption, auch wenn es mit einem Strich beginnt.

Andere Tipps

Werden alle Dateien / Verzeichnisse unterhalb des aktuellen löschen.

find -mindepth 1 -delete

Wenn Sie das gleiche mit einem anderen Verzeichnis, dessen Namen Sie zu tun haben wollen, können Sie nur nennen, dass

find <name-of-directory> -mindepth 1 -delete

Wenn Sie nicht nur die Unterverzeichnisse und Dateien davon entfernen möchten, sondern auch das Verzeichnis selbst, lassen -mindepth 1. Tun Sie es ohne die -delete eine Liste der Dinge, die entfernt werden sollen.

Was ich immer tun, ist Typ

rm -rf *

und dann ESC getroffen -. * , und bash die * auf eine explizite Liste von Dateien und Verzeichnissen im aktuellen Arbeitsverzeichnis erweitern

Die Vorteile sind:

  • kann ich die Liste der Dateien überprüfen zu löschen, bevor man ENTER.
  • Der Befehl wird die Geschichte nicht enthalten „rm -rf *“ mit dem Wildcard intakt, die dann möglicherweise versehentlich zur falschen Zeit am falschen Ort wiederverwendet werden. Stattdessen wird der Befehl Geschichte, die tatsächlichen Dateinamen haben dort.
  • Es ist auch praktisch, einmal oder zweimal zu beantworten wird „warten Sie eine Sekunde ... welche Dateien habe ich einfach löschen?“. Die Dateinamen sind im Terminal Rückholung Puffer oder die Befehls Geschichte.

In der Tat, wie ich dies so sehr, dass ich habe es das Standardverhalten für TAB mit dieser Linie in Bashrc gemacht:

bind TAB:insert-completions

Mit

rm -rf *

Update: Die . für aktuelles Verzeichnis steht, aber wir können diese nicht verwenden. Der Befehl scheint explizit überprüft . und .. zu haben. Verwenden Sie den Platzhalter Globbing statt. Aber das kann riskant sein.

Eine sicherere Version IMO ist zu verwenden:

rm -ri * 

(dies fordert Sie zur Bestätigung vor jede Datei / Verzeichnis zu löschen.)

Es ist richtig, dass rm –rf . alles im aktuellen entfernen werden alle Unterverzeichnisse und deren Inhalte direkt darunter. Der einzelne Punkt (.) bedeutet das aktuelle Verzeichnis. vorsicht nicht rm -rf .. zu tun, da der Doppelpunkt (..), um das vorherige Verzeichnis bedeutet.

Nachdem dies gesagt ist, wenn Sie wie ich sind und haben mehrere Terminal-Fenster offen zur gleichen Zeit, Sie besser, sicher und rm -ir . Lets auf den Befehl Argumente aussehen verwenden würde, zu verstehen, warum.

Erstens, wenn man sich die rm Befehl man (man rm unter den meisten Unix) Sie dass –r bemerkt bedeutet „den Inhalt von Verzeichnissen rekursiv entfernen“. Also, allein tut rm -r . würde alles im aktuellen Verzeichnis löschen und alles, was es unten.

In rm –rf . die addierten -f bedeutet "ignoriert nicht vorhandene Dateien, nie prompt". Dieser Befehl löscht alle Dateien und Verzeichnisse im aktuellen Verzeichnis und nie aufgefordert, die Sie wirklich bestätigen wollen, das zu tun. -f ist besonders gefährlich, wenn Sie den Befehl unter einem Privileg Benutzer ausgeführt werden, da Sie den Inhalt jedes Verzeichnis löschen können, ohne eine Chance zu bekommen, um sicherzustellen, das ist wirklich das, was Sie wollen.

Auf der otherhand, in rm -ri . die -i, die die -f ersetzt bedeutet "prompt vor jeder Entnahme". Dies bedeutet, dass Sie eine Chance bekommen, zu sagen „oups! Das ist nicht, was ich will“, bevor rm alle Ihre Dateien glücklich löschen geht.

In meinen frühen Tagen Sysadmin ich auf einem System mit einem rm -rf / tat, während sie mit voll Rechten (root) angemeldet. Das Ergebnis waren zwei Tage, um eine Wiederherstellung des Systems von Backups übergeben. Deshalb habe ich jetzt rm -ri jetzt beschäftigen.

Wie wäre:

rm -rf "$(pwd -P)"/* 
rm  -rf * 

Tun Sie es nicht! Es ist gefährlich! LASSEN SIE im richtigen Verzeichnis sind!

machen sicher Sie sind im richtigen Verzeichnis

rm -rf *

Diese einfachste sichere und allgemeine Lösung ist wahrscheinlich:

find -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf

Ich glaube, diese Antwort ist besser:

https://unix.stackexchange.com / Fragen / 12593 / how-to-remove-all-die-files-in-a-Verzeichnis

  

Wenn Ihr Top-Level-Verzeichnis images aufgerufen wird, dann rm -r images/* laufen. Dies verwendet die Shell-Glob Operator * rm -r auf jede Datei oder das Verzeichnis innerhalb von Bildern auszuführen.

im Grunde gehen Sie eine Ebene nach oben, und dann sagen, alles in X-Verzeichnis löschen. So können Sie noch angeben, welche Ordner sollte ihr Inhalt gelöscht haben, die sicherer ist als nur zu sagen ‚löschen alles hier“, während die ursprünglichen Ordner zu bewahren, (die manchmal Sie wollen, weil Sie nicht berechtigt sind oder wollen einfach nicht, zu ändern, den Ordner der vorhandenen Berechtigungen)

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