gedit erstellt versteckte Sicherungsdateien, die mit '~' enden. Ich wollte eine rekursive Bereinigung meines Verzeichnisbaums durchführen.
Der Befehl rm *~
löscht alle lokalen Dateien, die mit '~' enden.
Ich dachte, ich rm -r *~ .
würde alle Dateien im gesamten Baum löschen, aber ich habe getippt rm -r ~
.
Es gab eine Meldung, dass ein Verzeichnis nicht gelöscht werden konnte, und ich beendete den Befehl. Die Frage ist: Was habe ich gelöscht?
Ich habe bemerkt, dass meine Filezilla-Konfiguration weg war. Löscht dieser Befehl alle versteckten Verzeichnisse aus dem Ausgangsverzeichnis?
command-line
bash
GUI Junkie
quelle
quelle
-r
sei denn, ich möchte alles loswerden.rm -r *~ .
würden alle Dateien und Ordner (im aktuellen Verzeichnis) übereinstimmen*~
oder löschen.
. (wird ausnahmsweise.
ignoriertrm
, da die meisten*~
Benutzer das aktuelle Verzeichnis nicht rekursiv löschen möchten. Dadurch werden alle Dateien und Verzeichnisse im aktuellen Verzeichnis gelöscht, die auf enden~
, jedoch nicht die Dateien und Verzeichnisse in den Unterverzeichnissen des aktuellen Verzeichnisses. ) Also das hättest du nicht gewollt. Sie hätten wahrscheinlichfind
mit dem-exec
Flag rekursiv durch den Verzeichnisbaum schauen und jede Datei, die auf endet, nicht rekursiv löschen wollen~
.~
Charakter singen , ohne ihn zu verlassen (wie\~
folgt:), wird Bash, ZSH usw. (derrm
Befehl im Grunde genommen) glauben, Sie meinen das Home-Verzeichnis.Antworten:
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: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
Verwenden Sie für einige Dateien die
-i
Option, um eine Bestätigung zum Entfernen von Dateien oder Verzeichnissen zu erhalten:./
Stellen Sie beim Entfernen aus einem aktuellen Verzeichnis ein voran, um zu vermeiden, dass versehentlich ein anderer Speicherort entfernt wird:Das Obige diente zur Demonstration der Verwendung von
./
. Wenn es ein Unterverzeichnis gibt, können Sie es natürlich auch verwendenrm -v something/*~
. Achtung : Denken Sie nicht, dass dadurchrm ./.*
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.
Verwenden Sie
find
(möglicherweise mitgrep
), 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, eineman find
Auswahl zu treffen (eine Fundgrube), aber wenn Sie sich nicht darum kümmern möchten, können Sie die vertrautengrep
Filter verwenden, um nach den Dateien zu filtern, die Sie löschen möchten.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 derrm -v
zuvor erwähnten ausführlichen Ausgabe überxargs
: das gibt mir diese Ausgabe. Eine solche Vorschau verhindert Probleme, bei denen Sie beispielsweise einen Tippfehler machen undsample
stattdessen tippenexample
.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 diesxargs
entweder zum Fehlschlagen oder zur Eingaberm
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 mitfind
den Operatoren und Aktionen von zu tun .Im Folgenden werden alle Dateien angezeigt, die das Wort enthalten
example
Wenn es sich bei dieser Liste um die Dateien handelt, die Sie entfernen möchten
-exec
, übergeben Sie die Dateien mithilfe der Aktion anrm
.Weitere Hilfe zur Verwendung finden Sie unter Verwenden von Find
find
.quelle
find
zugrep
undxargs rm
ist gefährlich.mv
(mein Lieblingsbefehl);)find
die sichere Verwendung hinzufügen , das nicht kaputt geht (und möglicherweise die falschen Dateien löscht), wenn Dateinamen Leerzeichen, Tabulatoren, Zeilenumbrüche"
oder'
Zeichen enthalten. Egfind . -name "*example*" -exec rm -v {} +
. mywiki.wooledge.org/UsingFindfind -delete
so gefährlich? Ich hätte hier etwas gesagt, aber ich weiß nicht anders als es kürzlich gefunden und habe meine/
trotz eines Probelaufs ohne Option-delete
nur wenige Dateien gefunden, die ich entfernen wollte. Ich sehe, dass Sie-exec rm
stattdessen empfehlen .-delete
ist nicht gefährlich, und Sie können es sicher anstelle von verwenden-exec rm {} +
. Im Allgemeinen bevorzuge ich die Verwendung von Standardtools und -funktionen, wenn dies möglich ist.-delete
ist eine nicht-standardmäßige GNU-Erweiterungfind
, die unter Ubuntu funktioniert, auf anderen Systemen jedoch möglicherweise nicht.Ja. Ein nicht zitiertes Tilde-Zeichen als separates Argument wird zu Ihrem Homedir erweitert. Also
rm -r ~
wurde erweitert umrm -r /home/yourusename
. Also haben Sie rm angewiesen, alle Dateien in Ihrem Homedir rekursiv zu löschen.Weitere Informationen zur Funktionsweise der Tilde-Erweiterung finden Sie unter http://www.gnu.org/software/bash/manual/bashref.html#Tilde-Expansion .
quelle