Aus dem Handbuch:
-f, --force
nicht vorhandene Dateien ignorieren, nie nachfragen
-r, -R, --recursive
den Inhalt von Verzeichnissen rekursiv entfernen
Obwohl die Beschreibung dieser Optionen anders ist, führt der Versuch, einen leeren Ordner zu löschen (in diesem Beispiel ohne rmdir), zum selben Ergebnis.
-f
druckt im Vergleich zu keinen Fehler oder irgendetwas anderes -r
. Ist das der einzige Unterschied oder gibt es bestimmte Situationen, in denen eine Option besser als eine andere ist, oder Situationen, in denen eine der Optionen einfach nicht funktioniert, während die andere funktioniert?
Antwort1
Dies ist, was die Manpage in CentOS sagt:
-f, --force
ignore nonexistent files, never prompt
-r, -R, --recursive
remove directories and their contents recursively
Soweit ich es verstehe (dank einiger Kommentare unten), gilt Folgendes für die Flags -r
und -f
:
-R
- löscht rekursiv den Inhalt eines Verzeichnisses, einschließlich versteckter Dateien und Unterverzeichnisse
- Abhängig von Ihrer Konfiguration kann es sein, dass Sie um Erlaubnis gebeten werden (beispielsweise bei Verwendung des
--interactive
Flags). Einige Distributionen tun dies standardmäßig. - kann verwendet werden, um ein Verzeichnis zu entfernen. Wenn Sie dies tun möchten, geben Sie einfach den Pfad des Verzeichnisses an (zum Beispiel:
/path/to/directory
)
-F
- löscht den Inhalt eines Verzeichnisses nicht rekursiv, sondern entfernt nur Dateien, die direkt dem angegebenen Pfad entsprechen (z. B.
example/file1
oderexample/*
). - Löscht niemals Unterverzeichnisse
- Fragt nie nach Erlaubnis, im Grunde das
yes to all
in Windows
Nachfolgend finden Sie einige Beispiele. Sie beginnen alle mit der folgenden Struktur:
example/
file1
file2
file3
.file
dir/
file1
file2
file3
.file
Für diese Beispiele habe ich die Ausführlichkeit und den interaktiven Modus standardmäßig aktiviert. Einige Distributionen tun dies, andere nicht.
rm Beispiel
$ rm example
rm: cannot remove `example': Is a directory
Wie Sie sehen, rm
werden standardmäßig keine Verzeichnisse entfernt.
rm Beispiel -f
$ rm example -f
rm: cannot remove `example': Is a directory
Die Verwendung des -f
Flags ermöglicht weiterhin nicht das Entfernen von Verzeichnissen.
rm Beispiel -r
$ rm example -r
rm: descend into directory `example'? yes
rm: remove regular empty file `example/file3'? yes
removed `example/file3'
rm: remove regular empty file `example/file2'? yes
removed `example/file2'
rm: descend into directory `example/dir'? yes
rm: remove regular empty file `example/dir/.file'? yes
removed `example/dir/.file'
rm: remove regular empty file `example/dir/file3'? yes
removed `example/dir/file3'
rm: remove regular empty file `example/dir/file2'? yes
removed `example/dir/file2'
rm: remove regular empty file `example/dir/file1'? yes
removed `example/dir/file1'
rm: remove directory `example/dir'? yes
removed directory: `example/dir'
rm: remove regular empty file `example/file1'? yes
removed `example/file1'
rm: remove directory `example'? yes
removed directory: `example'
Wie Sie sehen, werden Sie für jede einzelne Datei und jedes einzelne Verzeichnis um Berechtigung gebeten; versteckte Dateien werden ebenfalls entfernt.
rm Beispiel/* -f
$ rm example/* -f
rm: cannot remove `example/dir': Is a directory
removed `example/file1'
removed `example/file2'
removed `example/file3'
Hierbei werden keine Berechtigungen abgefragt, Verzeichnisse werden nicht gelöscht und auch versteckte Dateien nicht.
rm Beispiel/* -r
$ rm example/* -r
rm: descend into directory `example/dir'? yes
rm: remove regular empty file `example/dir/.file'? yes
removed `example/dir/.file'
rm: remove regular empty file `example/dir/file3'? yes
removed `example/dir/file3'
rm: remove regular empty file `example/dir/file2'? yes
removed `example/dir/file2'
rm: remove regular empty file `example/dir/file1'? yes
removed `example/dir/file1'
rm: remove directory `example/dir'? yes
removed directory: `example/dir'
rm: remove regular empty file `example/.file'? yes
removed `example/file'
rm: remove regular empty file `example/file1'? yes
removed `example/file1'
rm: remove regular empty file `example/file2'? yes
removed `example/file2'
rm: remove regular empty file `example/file3'? yes
removed `example/file3'
Hier wird der Inhalt des Beispielverzeichnisses (nicht das Verzeichnis selbst) entfernt, einschließlich versteckter Dateien.
Antwort2
rm -r mydir
entfernt das mydir
Verzeichnis mit seinem gesamten Inhalt.
rm -f mydir
löscht kein Verzeichnis (weder leer noch mit Inhalt). Es wird ein Fehler gemeldet:
unter BSD/OS X:
rm: mydir/: is a directory
unter GNU/Linux:
rm: cannot remove 'mydir': Is a directory
Mögliche Erklärungen für das rm
Verhalten des Befehls unabhängig von den angegebenen Argumenten (von der wahrscheinlichsten bis zur unwahrscheinlichsten):
- Sie haben einen Shell-Alias
rm
definiert und dieser übergibt einige definierte Parameter (wie-r
) an denrm
Befehl - Sie rufen ein Skript auf
rm
, das dem eigentlichen Befehl noch weitere Parameter übergibt. - Sie haben eine benutzerdefinierte
rm
ausführbare Datei
Sie können die ersten beiden Möglichkeiten durch Ausführen überprüfen /bin/rm -f mydir
.