Der nächste, den ich bekommen habe, ist
# rm /path/to/directory/*.*
aber das funktioniert nicht für Dateien, die keine Erweiterung haben ...
Der nächste, den ich bekommen habe, ist
# rm /path/to/directory/*.*
aber das funktioniert nicht für Dateien, die keine Erweiterung haben ...
Antworten:
Linux verwendet keine Erweiterungen. Es ist Sache des Erstellers der Datei, zu entscheiden, ob der Name eine Erweiterung haben soll. Linux untersucht das 1. Byte, um herauszufinden, um welche Art von Datei es sich handelt.
Um alles in einem Verzeichnis zu entfernen, verwenden Sie:
rm /path/to/directory/*
Sie können die -r
Option zum Beispiel verwenden:
rm -r /path/to/directory/*
um auch alle Unterverzeichnisse (zusammen mit ihrem gesamten Inhalt) innerhalb des Verzeichnisses zu entfernen, von dem Sie den Inhalt entfernen. Andernfalls wird ein Fehler angezeigt, der Sie darüber informiert, dass das Verzeichnis nicht entfernt wird.
all files
;) *.*
bedeutet alle Dateien, die .
irgendwo im Namen enthalten
*a*
also null oder mehr Zeichen, a
gefolgt von null oder mehr Zeichen. Es würde die Dateinamen übereinstimmen happy
, apple
, a
oder la
.
So entfernen Sie den Ordner mit seinem gesamten Inhalt ( einschließlich aller internen Ordner ):
rm -rf /path/to/directory
So entfernen Sie den gesamten Inhalt des Ordners ( einschließlich aller internen Ordner ), jedoch nicht den Ordner selbst:
rm -rf /path/to/directory/*
oder
rm -rf /path/to/directory/{*,.*}
wenn Sie sicherstellen möchten, dass auch versteckte Dateien / Verzeichnisse entfernt werden.
So entfernen Sie alle "Dateien" aus einem Ordner ( ohne interne Ordner zu entfernen ):
rm -f /path/to/directory/{*,.*}
Warnung : Wenn Sie Leerzeichen in Ihrem Pfad haben, stellen Sie sicher, dass Sie immer Anführungszeichen verwenden.
rm -rf /path/to the/directory/*
entspricht 2 getrennten rm -rf
Aufrufen:
rm -rf /path/to
rm -rf the/directory/*
Um dieses Problem zu vermeiden, können Sie '
einfache Anführungszeichen '
( erweitert keine Shell-Variablen) oder "
doppelte Anführungszeichen "
( erweitert Shell-Variablen) verwenden:
rm -rf "/path/to the/directory/"*
Wo:
rm
- steht für " entfernen "-f
- steht für " force ", was hilfreich ist, wenn Sie nicht gefragt werden möchten, ob Sie beispielsweise ein Archiv entfernen möchten.-r
- steht für " rekursiv ", was bedeutet, dass Sie jeden Ordner rekursiv durchgehen und alles entfernen möchten.rm -rf /path/to/directory/*
entfernt keine versteckte Datei im Ordner zB .htaccess
. Vielleicht rm -rf /path/to/directory/.
? Habe es nicht ausprobiert.
rm -rf /path/to/directory/.*
löscht nur die versteckten Dateien im angegebenen Verzeichnis. Wenn Sie sich den Kommentar von @ danjjl zur Antwort von @ Rinzwind ansehen, um auch versteckte Dateien zu löschen, führen Sie ihn aus, shopt -s dotglob
bevor Sie ihn ausführen rm -rf /path/to/directory/*
.
rm -rf /path/to/directory/.*
Auf meinem System wurden die Elemente in gelöscht /path/to
. Zum Glück hatte ich gerade meine gesamten Daten auf einer separaten Festplatte gesichert. Der Befehl rm -rf /path/to/directory/.*
darf NICHT ausgegeben werden, es sei denn, Sie haben Ihren gesamten Computer an einem separaten / sicheren Ort gesichert!
So entfernen Sie alle Dateien im Verzeichnis (einschließlich versteckter Dateien und Unterverzeichnisse):
rm -rf /path/to/directory/{*,.*}
./
und ../
die versteckten Dateien werden trotzdem gelöscht.
rm -r $(pwd)/{*,.*}
Wenn Sie nur Dateien in / path / to / directory löschen möchten, können Sie dies tun
find /path/to/directory -type f -print0| xargs -0 rm
oder
find /path/to/directory -type f -exec rm '{}' \;
Sie können Lasten damit erledigen find
, der Vorteil ist, dass Sie auflisten können, was gefunden wird, ohne es weiterzuleiten, rm
sodass Sie sehen können, was gelöscht wird, bevor Sie beginnen.
GNU find
als -delete
Prädikat. Wenn Sie noch verwenden möchten -exec
, und ersetzen \;
mit +
versammeln rm
Anrufe zusammen, die Effizienz zu erhöhen.
Um alle Dateien und Verzeichnisse (einschließlich der ausgeblendeten ) in einem Verzeichnis zu löschen , können Sie Folgendes versuchen:
Löschen Sie den Ordner und erstellen Sie ihn neu
rm -rf dir_name && mkdir dir_name
verwenden find
find dir_name -mindepth 1 -delete
Hier geben wir -mindepth 1
an, dass das Verzeichnis dir_name selbst ausgeschlossen werden soll.
Schauen Sie sich den folgenden Link an:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory
Wenn Sie auch alle Unterverzeichnisse und das Verzeichnis selbst entfernen möchten, können Sie verwenden rm -rf /path/to/directory
. Aber überprüfen Sie Ihre Zeile immer noch einmal, bevor Sie die rm -rf
Eingabetaste drücken. Dies kann ebenfalls zu Problemen führen, z.
Da diese Frage bei Google ständig im Vordergrund steht, wenn ich selbst danach suche:
Die anderen Antworten haben unterschiedliche Probleme:
Einige von ihnen gehören .
und ..
das ist laut, verwirrend und ärgerlich.
Einige von ihnen vergessen versteckte Dateien (Dateien, die mit einem Punkt beginnen).
Sie werden nicht in der richtigen (tiefsten zuerst) Reihenfolge gelöscht, um das Löschen des Verzeichnisses zu ermöglichen.
Sie gehen in andere (gemountete) Dateisysteme über, was häufig unerwünscht ist.
Es ist schwierig, sie mit zusätzlichen Parametern richtig zu erweitern (mehr dazu weiter unten).
find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --
Beachten Sie, dass ich ein -xdev
Argument hinzugefügt habe , um das Herabsteigen in Reittiere (wie /proc
usw.) zu verhindern .
-depth
oder -delete
?Obwohl die Leute mich ständig dafür herabstimmen, haben diese Methoden einen Nachteil: Sie scheinen nicht erweiterbar genug zu sein, um -prune
ein Unterverzeichnis zuzulassen (ohne weitere Probleme einzuführen). Im Gegensatz zu dieser Methode könnten Sie einfügen
-not \( -path "${DIR}/subdir" -prune \)
vor dem -mindepth
Argument, um auszuschließen, subdir
dass sein Inhalt gelöscht wird.
-depth
Flagge find
.
-delete
mit verwendenfind
? -delete
ist Tiefe an erster Stelle. Sie gehen bereits von Nicht-POSIX find
mit dem aus -printf
, daher können Sie auch -delete
oder-depth -print0 | xargs -0 rm
-not \( -path "$DIR/subdir" \)
... aber meine? Warum?
Sie können cd
in das Verzeichnis und dann den Befehl rm *.*
wie in DOS ausführen, wenn Sie sich erinnern.
shopt -s dotglob
vor dem Ausführen ausrm (...)