2012-08-15 6 views
6

Fragen

  • Was ist der Unterschied zwischen den rm -d und rm -R Befehle in Bash?
  • Welches sollte ich verwenden?

Einzelheiten

Nach der Manpage für den rm Befehl:Bash: Was ist der Unterschied zwischen "rm -d" und "rm -R"?

  • rm -d Versuch Verzeichnisse sowie andere Arten von Dateien zu entfernen.
  • rm -R versucht, die Dateihierarchie in jeder Datei Argument entfernt zu entfernen. Die Option -R impliziert die Option -d.

Nun, ich bin mir dessen bewusst, dass letzte Aussage (-R impliziert -d), die meine Frage scheinen mag zu beantworten. Ich frage mich jedoch immer noch, warum beide Befehlsflaggen überhaupt existieren, wenn sie angeblich identisch sind mit dem, was sie tun.

Da ich immer noch dabei bin Bash zu lernen, denke ich, es ist gut zu wissen, welche Option die bevorzugte Wahl unter Bash-Programmierern ist (konventionell) und warum.

+0

Was seltsam ist, dass Sie Leute diskutieren? Mein Bog-Standard GNU Coreutils rm hat keine Option -d. – themel

+1

Die BSD-Version von 'rm' hat' -d'. Während der POSIX-Standard besagt, dass 'rm' sich identisch mit' rmdir' verhalten soll, wenn das Ziel ein Verzeichnis ist, folgt die BSD-Version dem historischen Verhalten von 'rm', es sei denn, Sie verwenden' -d'. – chepner

+0

Die '-d' Option ist nicht in [POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/rm.html), daher sollte diese Frage für das spezifische System markiert werden, in dem die Frage steht gerichtet. –

Antwort

9

Normalerweise entfernt rm ein Verzeichnis nicht, auch wenn es leer ist. rm -d macht nur rm handeln wie rmdir. Es weigert sich immer noch, das Verzeichnis zu entfernen, wenn es nicht leer ist, tut es aber, wenn es leer ist.

rm -R ist das vollständige rekursive Löschen, Entfernen des Verzeichnisses und seines gesamten Inhalts.

Ich habe noch nie -d verwendet, da ich nicht wusste, dass es existiert und immer nur rmdir verwenden. Ich würde rmdir/rm -d verwenden, wenn Sie nur das Verzeichnis entfernen möchten, wenn es tatsächlich leer ist. Speichern Sie rm -R für, wenn Sie vollständig wissen, dass Sie versuchen, ein Verzeichnis und seinen gesamten Inhalt zu entfernen.

3

Die -d Option ist speziell für die BSD-Implementierung von rm, die Sie wahrscheinlich auf Ihrem Mac finden. Es ist nicht in der GNU-Implementierung enthalten, die Sie auf Linux-Systemen finden.

Wenn Sie nach der bevorzugten Wahl suchen, wäre es -r (Kleinbuchstaben) zu verwenden, um ganze Bäume zu entfernen und rmdir zum Entfernen einzelner Verzeichnisse, die Sie finden, um Code zu sein, der tragbarer ist.

-1

Nur um klar zu sein, sollten Sie niemals rm -d verwenden. Angenommen, es schlägt nicht nur mit einer Fehlermeldung "Operation not allowed" fehl, wird das Verzeichnis ohne gelöscht, wodurch der Inhalt entfernt wird. In einem leeren Verzeichnis entspricht es rmdir. Auf einem nicht leeren Verzeichnis erzeugt es eine Inkonsistenz im Dateisystem, die eine Reparatur durch fsck oder ein sehr geschicktes manuelles Hacken erfordert.

Es ist eine dumme Option, die nie hätte existieren sollen.Die BSD-Leute waren auf einige schlechte Drogen, als sie es hinzufügten. rm -r war seit mindestens 1973 in UNIX gewesen, und rmdir seit 1971

+2

'rm -d' schlägt mit" Verzeichnis nicht leer "für mich fehl, wenn das Verzeichnis nicht leer ist. Vielleicht hat sich das Verhalten irgendwann geändert. – chepner

0

rm werden Dateien löschen, aber ich hatte Probleme versuchen, Verzeichnis zu entfernen, so dass es mit einiger Option markiert werden muß,

rm -f zwingen entfernen Datei

rm -R zur Bestätigung ohne zu fragen, wird ein Verzeichnis entfernen, aber in meinem Fall wurde zur Bestätigung aufgefordert, aber weil ich so viele Dateien haben, hielt ich auf y und y eingeben, die für die Ewigkeit gemacht

rm -Rf war meine endgültige Lösung, erzwungenes Entfernen des Verzeichnisses ohne askin g zur Bestätigung

Verwandte Themen