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 -rOption 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, agefolgt von null oder mehr Zeichen. Es würde die Dateinamen übereinstimmen happy, apple, aoder 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 -rfAufrufen:
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 dotglobbevor 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, rmsodass Sie sehen können, was gelöscht wird, bevor Sie beginnen.
GNU findals -deletePrädikat. Wenn Sie noch verwenden möchten -exec, und ersetzen \;mit +versammeln rmAnrufe 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 1an, 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 -rfEingabetaste 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 -xdevArgument hinzugefügt habe , um das Herabsteigen in Reittiere (wie /procusw.) zu verhindern .
-depthoder -delete?Obwohl die Leute mich ständig dafür herabstimmen, haben diese Methoden einen Nachteil: Sie scheinen nicht erweiterbar genug zu sein, um -pruneein Unterverzeichnis zuzulassen (ohne weitere Probleme einzuführen). Im Gegensatz zu dieser Methode könnten Sie einfügen
-not \( -path "${DIR}/subdir" -prune \)
vor dem -mindepthArgument, um auszuschließen, subdirdass sein Inhalt gelöscht wird.
-depthFlagge find.
-deletemit verwendenfind ? -deleteist Tiefe an erster Stelle. Sie gehen bereits von Nicht-POSIX findmit dem aus -printf, daher können Sie auch -deleteoder-depth -print0 | xargs -0 rm
-not \( -path "$DIR/subdir" \)... aber meine? Warum?
Sie können cdin das Verzeichnis und dann den Befehl rm *.*wie in DOS ausführen, wenn Sie sich erinnern.
shopt -s dotglobvor dem Ausführen ausrm (...)