it-swarm.com.de

Wie entferne ich alle Dateien aus einem Verzeichnis?

Der nächste, den ich bekommen habe, ist

# rm /path/to/directory/*.*

aber das funktioniert nicht für Dateien, die keine Erweiterung haben ...

285
user784637

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 Option -r verwenden, zum Beispiel:

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.

332
Rinzwind
  • So entfernen Sie den Ordner mit all seinen Inhalten (einschließlich aller inneren Ordner):

    rm -rf /path/to/directory
    
  • So entfernen Sie alle Inhalte des Ordners (einschließlich aller inneren 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 ( nicht entfernen innere Ordner):

    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 separaten rm -rf Aufrufen:

    rm -rf /path/to
    rm -rf the/directory/*
    

    Um dieses Problem zu vermeiden, können Sie 'single-quotes' (wird nicht erweitert Shell-Variablen) oder "double-quotes" (erweitert Shell Variablen):

    rm -rf "/path/to the/directory/"*
    


Wo:

  • rm - steht für "remove"
  • -f - steht für "force". Dies ist hilfreich, 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.
168

So entfernen Sie alle Dateien im Verzeichnis (einschließlich versteckter Dateien und Unterverzeichnisse):

rm -rf /path/to/directory/{*,.*}
43

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 Ladevorgänge mit find ausführen. Der Vorteil besteht darin, dass Sie auflisten können, was gefunden wird, ohne es an rm weiterzuleiten, sodass Sie sehen können, was gelöscht wird, bevor Sie beginnen.

9

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
    
  • benutze find

    find dir_name -mindepth 1 -delete  
    

Hier geben wir -mindepth 1 an, um das Verzeichnis dir_name selbst auszuschließen.
Schauen Sie sich den folgenden Link an:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory

7
zeekvfu

Wenn Sie auch alle Unterverzeichnisse und das Verzeichnis selbst entfernen möchten, können Sie rm -rf /path/to/directory verwenden. Aber überprüfen Sie Ihre Zeile immer noch einmal, bevor Sie die Eingabetaste drücken. rm -rf kann ebenfalls viele Probleme verursachen, z. Wenn Sie versehentlich ein Leerzeichen nach dem ersten Schrägstrich einfügen, während Sie über Superuser-Berechtigungen verfügen ...

6
Tobias Kienzler

Da diese Frage bei Google ständig im Vordergrund steht, wenn ich selbst danach suche:

Die anderen Antworten haben unterschiedliche Probleme:

  1. Einige von ihnen schließen . und .. ein, die laut, verwirrend und ärgerlich sind.

  2. Einige von ihnen vergessen versteckte Dateien (Dateien, die mit einem Punkt beginnen).

  3. Sie werden nicht in der richtigen (tiefsten zuerst) Reihenfolge gelöscht, um das Löschen des Verzeichnisses zu ermöglichen.

  4. Sie gehen in andere (gemountete) Dateisysteme über, was häufig unerwünscht ist.

  5. Es ist schwierig, sie mit zusätzlichen Parametern richtig zu erweitern (mehr dazu weiter unten).

Gehen Sie folgendermaßen vor, um alle Dateien UND Ordner in einem Verzeichnis REKURSIV zu löschen:

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 ein Herabsteigen in Reittiere (wie /proc usw.) zu verhindern.

Warum nicht -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 zu erlauben (ohne weitere Probleme einzuführen). Im Gegensatz zu dieser Methode könnten Sie einfügen

-not \( -path "${DIR}/subdir" -Prune \)

vor dem Argument -mindepth, um subdir vom Löschen seines Inhalts auszuschließen.

1
Mehrdad

Sie können cd in das Verzeichnis eingeben und dann den Befehl rm *.* wie unter DOS ausführen, wenn Sie sich erinnern.

0
V K Mavani

Zum Löschen des aktuellen Verzeichnisses können Sie beispielsweise rm -d ./* verwenden.

-d weist an, auch Verzeichnisse zu löschen.

0
arviman