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 .*

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.


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.


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.


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.


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


2

Oh mein Zsh

rm -rf (.|)*

Auch dies ist nur für Zsh.


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 {} \;

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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.