Ich weiß, dass dadurch alles in einem Unterverzeichnis und darunter gelöscht wird:
rm -rf <subdir-name>
Aber wie löscht man alles im aktuellen Verzeichnis sowie jedes Unterverzeichnis darunter und den Inhalt all dieser Unterverzeichnisse?
Ich weiß, dass dadurch alles in einem Unterverzeichnis und darunter gelöscht wird:
rm -rf <subdir-name>
Aber wie löscht man alles im aktuellen Verzeichnis sowie jedes Unterverzeichnis darunter und den Inhalt all dieser Unterverzeichnisse?
Antworten:
Übe sicheres Rechnen. Gehen Sie einfach eine Ebene in der Hierarchie nach oben und verwenden Sie keinen Platzhalterausdruck:
cd ..; rm -rf -- <dir-to-remove>
Die beiden Striche zeigen an --
, rm
dass dies <dir-to-remove>
keine Befehlszeilenoption ist, selbst wenn sie mit einem Bindestrich beginnt.
rm ./
Sie versehentlich eingeben, rm . /
was eine Katastrophe sein könnte.
Löscht alle Dateien / Verzeichnisse unter dem aktuellen.
find -mindepth 1 -delete
Wenn Sie dasselbe mit einem anderen Verzeichnis tun möchten, dessen Namen Sie haben, können Sie diesen einfach benennen
find <name-of-directory> -mindepth 1 -delete
Wenn Sie nicht nur die Unterverzeichnisse und Dateien entfernen möchten, sondern auch das Verzeichnis selbst, lassen Sie es weg -mindepth 1
. Machen Sie es ohne -delete
, um eine Liste der Dinge zu erhalten, die entfernt werden.
-mindepth 1
wenn Sie ein Verzeichnis angeben ( find <name-of-directory> -mindepth 1 -delete
). Andernfalls hat Johannes Recht, das aktuelle Arbeitsverzeichnis wird nicht gelöscht (bei Verwendung find -delete
).
find -mindepth 1 -delete
aber ich habe illegal option -- m
es bekommen, aber es hat großartig funktioniert, als ich die Mindepth-Option entfernt habe find . -delete
Was ich immer mache, ist Typ
rm -rf *
und drücken Sie dann ESC- * und bash die * auf eine explizite Liste von Dateien und Verzeichnisse im aktuellen Arbeitsverzeichnis erweitern.
Die Vorteile sind:
Tatsächlich gefällt mir das so gut, dass ich es mit dieser Zeile in .bashrc zum Standardverhalten für TAB gemacht habe:
bind TAB:insert-completions
--
diese Antwort? Dieser Ansatz ist insgesamt fantastisch, muss ich sagen.
Verwenden
rm -rf *
Update: Das .
steht für das aktuelle Verzeichnis, aber wir können dieses nicht verwenden. Der Befehl scheint explizite Überprüfungen für .
und zu haben ..
. Verwenden Sie stattdessen den Platzhalter Globbing. Dies kann jedoch riskant sein.
Eine sicherere Version IMO ist zu verwenden:
rm -ri *
(Dies fordert Sie zur Bestätigung auf, bevor Sie jede Datei / jedes Verzeichnis löschen.)
Es ist richtig, dass rm –rf .
alles in der aktuellen direkt entfernt wird, einschließlich aller Unterverzeichnisse und deren Inhalt. Der einzelne Punkt ( .
) bedeutet das aktuelle Verzeichnis. Seien Sie vorsichtig, rm -rf ..
da der doppelte Punkt ( ..
) das vorherige Verzeichnis bedeutet.
Wenn Sie wie ich sind und mehrere Terminalfenster gleichzeitig geöffnet haben, sollten Sie auf Nummer sicher gehen und rm -ir .
die Befehlsargumente verwenden, um zu verstehen, warum.
Wenn Sie sich die rm
Manpage für Befehle ( man rm
unter den meisten Unix-Versionen) ansehen, stellen Sie zunächst fest, dass dies –r
bedeutet, dass der Inhalt von Verzeichnissen rekursiv entfernt wird. Wenn Sie dies rm -r .
alleine tun, wird alles im aktuellen Verzeichnis und alles darunter gelöscht.
Im rm –rf .
hinzugefügten -f bedeutet "nicht vorhandene Dateien ignorieren, niemals auffordern". Dieser Befehl löscht alle Dateien und Verzeichnisse im aktuellen Verzeichnis und fordert Sie niemals auf, zu bestätigen, dass Sie dies wirklich tun möchten. -f
Dies ist besonders gefährlich, wenn Sie den Befehl unter einem Berechtigungsbenutzer ausführen, da Sie den Inhalt eines beliebigen Verzeichnisses löschen können, ohne die Möglichkeit zu haben, sicherzustellen, dass dies wirklich das ist, was Sie möchten.
Auf der otherhand, in rm -ri .
dem -i
DASS ersetzt die -f
Mittel „prompt vor jeder Entnahme“. Dies bedeutet, dass Sie die Möglichkeit haben, "oups! Das ist nicht das, was ich will" zu sagen, bevor rm alle Ihre Dateien glücklich löscht.
In meinen frühen Sysadmin-Tagen habe ich rm -rf /
ein System erstellt, während ich mit vollen Berechtigungen (root) angemeldet war. Das Ergebnis war, dass zwei Tage vergangen waren, um das System aus Backups wiederherzustellen. Deshalb beschäftige ich mich jetzt rm -ri
jetzt.
Stellen Sie sicher , dass Sie sich im richtigen Verzeichnis befinden
rm -rf *
Ich glaube, diese Antwort ist besser:
/unix/12593/how-to-remove-all-the-files-in-a-directory
Wenn Ihr Verzeichnis der obersten Ebene aufgerufen wird
images
, führen Sie es ausrm -r images/*
. Dies verwendet den Shell-Glob-Operator*
, umrm -r
für jede Datei oder jedes Verzeichnis in Bildern ausgeführt zu werden.
Im Grunde geht man eine Ebene höher und sagt dann, alles im X-Verzeichnis löschen. Auf diese Weise legen Sie immer noch fest, in welchem Ordner der Inhalt gelöscht werden soll. Dies ist sicherer, als nur "Alles hier löschen" zu sagen, während der ursprüngliche Ordner erhalten bleibt (was Sie manchmal möchten, weil Sie nicht erlaubt sind oder einfach nicht wollen um die vorhandenen Berechtigungen des Ordners zu ändern)