Wie lösche ich alles in einem Verzeichnis?

25

Wie lösche ich alles in einem Verzeichnis, einschließlich versteckter Dateien und Verzeichnisse?

Im Moment benutze ich Folgendes:

rm -rf *
rm -rf .*
David Smith
quelle
5
Sie können sie zu kombinieren rm -rf .* *.
Benutzer unbekannt
2
Sie können ein Verzeichnis nach oben und dann ausführenrm -rf yourdirectory/*
Shreyansp
1
Entschuldigung, ich habe das versteckte Verzeichnis verpasst. Die vorherige Benutzerlösung deckt das ab
shreyansp
Diese zweite Option ist sehr gefährlich. Es stimmt mit dem ..Verzeichnis überein , wodurch alles gelöscht wird, was sich im obigen Verzeichnis befindet .
Richard Peterson

Antworten:

17

Einfach und unkompliziert:

find -delete 

Beinhaltet Verzeichnisse und versteckte Dateien. Zumindest weiß Gnu-Find -delete, dass findes Unterschiede geben kann.

Benutzer unbekannt
quelle
1
Um das Löschen des Verzeichnisses zu vermeiden, verwenden Sie find /path -delete -mindepth 1.
Orodbhen
@orodbhen: find -delete löscht nicht das Verzeichnis, in dem Sie den Befehl ausführen (wie in der Frage mit rm).
Benutzer unbekannt
11

Die beste Antwort ist: Tu das nicht. Entfernen Sie das Verzeichnis rekursiv selbst und erstellen Sie es dann als leeres Verzeichnis neu. Es ist zuverlässiger und für andere einfacher zu verstehen, was Sie versuchen. Wenn Sie das Verzeichnis neu erstellen, hat es möglicherweise einen anderen Eigentümer, eine andere Gruppe und andere Berechtigungen. Wenn diese wichtig sind, seien Sie vorsichtig. Wenn laufende Programme geöffnete Datei-Handles (Deskriptoren) im Verzeichnis haben, möchten Sie diese auch nicht entfernen. Wenn keiner dieser Sonderfälle zutrifft, ist es einfacher, das gesamte Verzeichnis zu entfernen.

Chris Quenelle
quelle
7
Wie ist das einfacher? "Sei vorsichtig" ist keine Antwort. Ich würde nicht verstehen, warum jemand ein Verzeichnis löscht und es erneut erstellt.
Benutzer unbekannt
Ich habe den Satz "als leeres Verzeichnis" hinzugefügt, vielleicht ist das klarer.
Chris Quenelle
2
Nein, es erklärt nicht, warum Sie ein Verzeichnis löschen und es dann neu erstellen. Zu den zu berücksichtigenden Dingen gehört übrigens auch Datum / Uhrzeit der Erstellung.
Benutzer unbekannt
2
Wenn dieses Verzeichnis das aktuelle Arbeitsverzeichnis eines Prozesses ist, können Probleme auftreten. Wenn Sie das Verzeichnis entfernen, entfernen Sie auch Informationen zu seinen Berechtigungen und seinem Besitz.
8
rm -rf -- * .[!.]* ..?*

Jedes der drei Muster erweitert sich zu sich selbst, wenn es mit nichts übereinstimmt, aber das ist hier kein Problem, da wir alles rm -fabgleichen möchten und nicht vorhandene Argumente ignorieren.

Beachten Sie, dass .*übereinstimmen würde.. .

Gilles 'SO - hör auf böse zu sein'
quelle
5

Vorausgesetzt, bash 4+:

shopt -s dotglob
rm -rf -- *
##or:
rm -rf ./*

Wenn dotglob aktiviert ist, wird es *auf alle Dateien und Verzeichnisse erweitert, auch auf diejenigen, die mit "" beginnen. Es wird .jedoch nicht auf "" .und "" erweitert .., sodass die Verwendung mit "" sicher ist rm.

Übelsuppe
quelle
2

Wenn Sie sich im Verzeichnis befinden:

cd .. && rm -rf dir && mkdir dir && cd dir

Andernfalls:

rm -rf /path/to/dir && mkdir /path/to/dir

David Harris
quelle
2

Oh mein Zsh

rm -rf (.|)*

Auch dies ist nur für Zsh.

phunehehe
quelle
2
Oder *(D)(das DGlob-Qualifikationsmerkmal aktiviert die glob_dotsOption für dieses Muster).
Gilles 'SO- hör auf böse zu sein'
Oder rm -rf {.,}*(im Gegensatz zu bash enthält zsh nicht .und ..in {.,}*, zumindest nicht auf meinem Computer).
Sasha
1

Wie wäre es mit find. Ich denke, dies ist im Allgemeinen eine gute Wahl, wenn Sie Unterverzeichnisse durchsuchen müssen.

find . -type f -exec rm {} \;
Schrägstrich
quelle
1
Es gibt einen -delete-Schalter, mit dem Sie Verzeichnisse löschen können. (Zumindest in gnu-find).
Benutzer unbekannt
dies löscht keine Unterverzeichnisse
sasha
-2

Versuchen Sie es rm -rf *?*. Dadurch werden normale und versteckte Dateien gelöscht.

gladimdim
quelle
4
Nicht in irgendeiner Hülle, die ich kenne.
Gilles 'SO- hör auf böse zu sein'
Du hast Recht. Es werden keine Unterverzeichnisse gelöscht.
Gladimdim
4
Es ist wahrscheinlicher, dass das Problem *?*nicht mit "Punkt" -Dateien / -Verzeichnissen übereinstimmt (es sei denn, Sie haben die dotglobOption in bash , die GLOB_DOTSOption in zsh oder eine Entsprechung für die von Ihnen verwendete Shell aktiviert ).
Chris Johnsen