Sie haben (fast) Ihr gesamtes Home-Verzeichnis gelöscht!
rm -r something
löscht rekursiv Dateien und Verzeichnisse in / unter etwas ; Es schlägt nur bei Elementen fehl, für die es keine Löschberechtigung hat, entweder weil sie einem anderen Benutzer gehören (z. B. root
) oder weil sie verwendet werden (z. B. ein GVFS-Mount).
Wenn Sie -f
(wie in, rm -rf something
) nicht hinzufügen , erhalten Sie Folgendes:
rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?
An diesem Punkt können Sie den Vorgang abbrechen und stellen dann wahrscheinlich fest, dass Sie den falschen Befehl ausgeführt haben.
Vorschläge der Community, wie solche Unfälle vermieden werden können
Hinweis: Community-Wiki, jeder kann gerne mitmachen.
Verwenden Sie für einige Dateien die -i
Option, um eine Bestätigung zum Entfernen von Dateien oder Verzeichnissen zu erhalten:
$ rm -ri something/
rm: remove regular file ‘something/file~’? y
rm: descend into directory ‘something’? y
rm: remove regular file ‘something/file’? y
rm: remove directory ‘something’? y
./
Stellen Sie beim Entfernen aus einem aktuellen Verzeichnis ein voran, um zu vermeiden, dass versehentlich ein anderer Speicherort entfernt wird:
$ cd something
$ rm -v ./*~
removed ‘./file~’
Das Obige diente zur Demonstration der Verwendung von ./
. Wenn es ein Unterverzeichnis gibt, können Sie es natürlich auch verwenden rm -v something/*~
. Achtung : Denken Sie nicht, dass dadurch rm ./.*
alle versteckten Dateien im aktuellen Verzeichnis entfernt werden. In dieser Serverfault-Frage finden Sie Problemumgehungen für das Globbing versteckter Dateien.
Verschieben statt löschen: Anstatt Dateien an erster Stelle rekursiv zu löschen, habe ich mich daran gewöhnt , die Dateien, die ich entfernen möchte, an einen anderen Ort zu verschieben, bevor ich sie endgültig lösche. Wenn etwas schief gelaufen ist, ist es einfach wiederherzustellen.
mv -b SOURCE DEST
Verwenden Sie find
(möglicherweise mit grep
), um eine Vorschau anzuzeigen, wenn Sie ausgewählte Dateien rekursiv löschen möchten. Sie sollten versuchen, dies zu einem seltenen Ereignis zu machen, aber wenn Sie ...
find
ohne Argumente listet rekursiv alle Dateien / Verzeichnisse unter dem aktuellen auf. Sie sollten versuchen, eine man find
Auswahl zu treffen (eine Fundgrube), aber wenn Sie sich nicht darum kümmern möchten, können Sie die vertrauten grep
Filter verwenden, um nach den Dateien zu filtern, die Sie löschen möchten.
- Angenommen, ich bin ein überragender Kernel-Hacker, und die wenigen KB "Beispiel" -Dateien in meinem Quellenbaum stören mich. Ich möchte alle Dateien löschen, die das im Namen enthalten. Also tippe ich
find | grep example
, was mir diese 20 Dateien gibt. Das sieht gut aus, also gehe ich jetzt und lösche die genauen Dateien zusammen mit der rm -v
zuvor erwähnten ausführlichen Ausgabe über xargs
:
finden | grep Beispiel | xargs rm -v
das gibt mir diese Ausgabe. Eine solche Vorschau verhindert Probleme, bei denen Sie beispielsweise einen Tippfehler machen und sample
stattdessen tippen example
.
Die obige Lösung sollte nicht verwendet werden, wenn Sie möglicherweise Dateinamen haben, die Leerzeichen, Tabulatorzeichen, Zeilenumbrüche oder Anführungszeichen ( "
oder '
) enthalten, da dies xargs
entweder zum Fehlschlagen oder zur Eingabe rm
unvollständiger Dateinamen führt, was im schlimmsten Fall zum Entfernen des falschen führen kann Dateien. Der sichere Weg, dies zu tun, besteht darin, alles mit find
den Operatoren und Aktionen von zu tun .
Im Folgenden werden alle Dateien angezeigt, die das Wort enthalten example
find . -name "*example*"
Wenn es sich bei dieser Liste um die Dateien handelt, die Sie entfernen möchten -exec
, übergeben Sie die Dateien mithilfe der Aktion an rm
.
find . -name "*example*" -exec rm -v {} +
Weitere Hilfe zur Verwendung finden Sie unter Verwenden von Findfind
.