Ich wundere mich über die Richtung der Rekursion im Allgemeinen und rm im Besonderen.
rm rekursion funktioniert nur abwärts richtig?
sudo rm -R *.QTFS
Wird ausgeführt : Löscht alle * .QTFS-Dateien im aktuellen Verzeichnis und seinen untergeordneten Dateien, richtig?
aktuelles Verzeichnis durch angezeigt , wie ls -lha
auch enthält .
und ..
Links für den Mangel eines besseren Wortes, also warum Rekursion diese nach oben im Verzeichnisbaum nicht folgen? Gibt es eine künstliche Grenze für rm App oder .
und ..
sind nicht wirklich Dinge?
Antworten:
rm -r x y
löschtx
undy
und alles in ihnen (wenn sie Verzeichnisse sind), aber nicht ihre Eltern oder irgendetwas außerhalb von ihnen.Nein. Es werden alle genannten Dateien
*.QTFS
, alle Dateien, die sich rekursiv in den genannten Verzeichnissen befinden*.QTFS
, und diese Verzeichnisse selbst gelöscht . Wenn Sie dieses andere Löschverhalten wünschen, verwenden Siefind -delete
.Es ist eine künstliche Grenze von
rm
.Es ist jedoch nicht wirklich künstlich - es ist die einzige Möglichkeit, wie es jemals funktionieren könnte. Wenn Sie
rm
den übergeordneten..
Links folgen , werdenrm -r
alle Dateien auf dem System entfernt, indem Sie allen..
Links bis zum nächsten Schritt folgen/
.rm
sieht die..
und.
-Einträge in jedem Verzeichnis, wenn es den Inhalt auflistet , und ignoriert sie aus diesem Grund explizit.Sie können das sogar selbst ausprobieren. Run
rm -r .
und die meistenrm
Implementierungen werden sich weigern zu handeln und einen Fehler explizit melden:(Diese Nachricht stammt von GNU
rm
; andere sind ähnlich). Wenn diese Einträge implizit und nicht als explizite Argumente erkannt werden, werden sie einfach ignoriert und fortgesetzt. Dieses Verhalten wird von POSIX benötigt . In GNUrm
und vielen BSDs wird es automatisch von derfts_read
Familie der hierarchietraversalen Funktionen bereitgestellt ..
und..
sind in der Regel echte Verzeichniseinträge, obwohl dies dateisystemspezifisch ist. Sie werden fast immer so dargestellt, als wären sie echte Eingaben in den gesamten Benutzercode, unabhängig davon. Viele Software-Teile sind (nicht nurrm
) Sonderfälle ihres Verhaltens, um Ausreißer oder unerwünschte Rekursionen abzufangen oder zu verhindern.quelle
fts_read
Implementierung darin, dass nur Befehlszeilenargumente verwendet werden.rm
sieht es nicht einmal,*.QTFS
weil es durch Bash in die Dateinamen global erweitert wird, bevor die RM-Binärdatei aufgerufen wird. Die Antwort von @ tobyink merkt das an..
und das..
Verhalten in Sonderfällen die Ursache für die Existenz der Dotfiles sindNeben dem, was Michael Homer geschrieben hat, gibt es noch einen weiteren Faktor, der es schwierig macht, versehentlich in das übergeordnete Verzeichnis zurückzukehren.
Gehen Sie in Ihr Home-Verzeichnis und geben Sie Folgendes ein:
Sie werden sehen, dass eine Liste von Dateien und Verzeichnissen mit dem Buchstaben "s" angezeigt wird. Es werden jedoch keine Dateien angezeigt, die mit einem führenden Punkt beginnen. Um sie anzuzeigen, können Sie Folgendes verwenden:
Dies liegt daran, dass sich die Shell weigert,
*
zu einem führenden Punkt zu expandieren . Das bedeutet, dass:Wird nicht wiederkehren
..
.quelle