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.
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.
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.
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.
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 ).
rm -rf .* *
.rm -rf yourdirectory/*
..
Verzeichnis überein , wodurch alles gelöscht wird, was sich im obigen Verzeichnis befindet .Antworten:
Einfach und unkompliziert:
Beinhaltet Verzeichnisse und versteckte Dateien. Zumindest weiß Gnu-Find
-delete
, dassfind
es Unterschiede geben kann.quelle
find /path -delete -mindepth 1
.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.
quelle
Jedes der drei Muster erweitert sich zu sich selbst, wenn es mit nichts übereinstimmt, aber das ist hier kein Problem, da wir alles
rm -f
abgleichen möchten und nicht vorhandene Argumente ignorieren.Beachten Sie, dass
.*
übereinstimmen würde..
.quelle
Vorausgesetzt, bash 4+:
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 istrm
.quelle
Wenn Sie sich im Verzeichnis befinden:
cd .. && rm -rf dir && mkdir dir && cd dir
Andernfalls:
rm -rf /path/to/dir && mkdir /path/to/dir
quelle
Oh mein Zsh
Auch dies ist nur für Zsh.
quelle
*(D)
(dasD
Glob-Qualifikationsmerkmal aktiviert dieglob_dots
Option für dieses Muster).rm -rf {.,}*
(im Gegensatz zu bash enthält zsh nicht.
und..
in{.,}*
, zumindest nicht auf meinem Computer).Wie wäre es mit
find
. Ich denke, dies ist im Allgemeinen eine gute Wahl, wenn Sie Unterverzeichnisse durchsuchen müssen.quelle
Versuchen Sie es
rm -rf *?*
. Dadurch werden normale und versteckte Dateien gelöscht.quelle
*?*
nicht mit "Punkt" -Dateien / -Verzeichnissen übereinstimmt (es sei denn, Sie haben diedotglob
Option in bash , dieGLOB_DOTS
Option in zsh oder eine Entsprechung für die von Ihnen verwendete Shell aktiviert ).