Wie viele (200 000) Dateien entfernen?

17

Ich muss 200 000 Dateien (alle) aus einem Ordner entfernen und möchte den Ordner selbst nicht löschen.

Mit rm erhalte ich den Fehler "Argumentliste zu lang". Ich habe versucht, etwas mit xargs zu machen, aber ich bin kein Shell-Typ, deshalb funktioniert es nicht:

find -name * | xargs rm -f
FMaz008
quelle
5
Warum wird der Ordner nicht gelöscht und nach dem Löschen neu erstellt?
Garconcn

Antworten:

35
$ find /path/to/folder -type f -delete
Quanten
quelle
15
Es ist wahrscheinlich erwähnenswert, dass GNU find (wie es von den meisten Linux-Distributionen verwendet wird) Dateien von selbst löschen kann -delete. Dies vermeidet auch Probleme mit Dateien, die Anführungszeichen oder Zeilenumbrüche enthalten (obwohl Sie -print0die -0Optionen von GNU find und GNU xarg verwenden könnten, um dies zu beheben).
DerfK
3
@DerfK, nette Bemerkung! Auch viele ppl neigen zu spielen xargsmittlerweile findhat -exec command {} +Syntax.
Poige
5

Sie machen alles richtig. Es ist das '*' , das Ihnen ein Problem bereitet (die Shell erweitert es in eine Liste von Dateien anstelle von find). Die richtige Syntax könnte sein:

cd <your_directory>; find . -type f | xargs rm -f
find <your_directory> -type f | xargs rm -f

(Letzteres ist etwas weniger effizient, da es längere Namen xargsübergibt, aber Sie werden es kaum bemerken :-))

Alternativ kannst du dein '*' auch so umgehen (aber in diesem Fall wird auch versucht, "." Und ".." zu entfernen; es ist kein großes Problem - du bekommst nur eine kleine Warnung :-)):

find . -name '*' | xargs rm -f
find . -name "*" | xargs rm -f
find . -name \* | xargs rm -f

Wenn Ihre Dateinamen Leerzeichen enthalten, verwenden Sie Folgendes:

find . -type f -print0 | xargs -0 rm -f
dtoubelis
quelle
1
Dies funktioniert nicht, wenn Sie einen Dateinamen haben, der ein Leerzeichen enthält.
user9517 unterstützt GoFundMonica
@lain: Ja, ich war gerade dabei, meine Antwort so zu bearbeiten, dass sie den Trick für Leerzeichen enthält :-)
dtoubelis
3

Der folgende Befehl löscht alle Dateien aus dem aktuellen Verzeichnis:

find . -type f -exec rm {} \;
George Tasioulis
quelle
2
-name '*'bedeutet nicht "alle Dateien". Akten sind zu -type f
lesen
2

Du kannst es versuchen

find /path/to/folder -type f -print0  | xargs -0 rm -f

oder

find /path/to/folder -type f -exec rm -f "{}" +
user9517 unterstützt GoFundMonica
quelle
1

Ein großes Lob an die Quanten antworten, hier sind einige Ergänzungen.

Wenn Sie Dateien mit einem bestimmten Namensmuster löschen möchten, können Sie es so schreiben. Außerdem wurde -print hinzugefügt, damit Sie sehen können, was passiert, wenn die Dateien gelöscht werden.

sudo find /home/mydirectory -name "*.jpg" -type f -print -delete

Dies löscht zum Beispiel alle JPEGs in meinem Verzeichnis.

Waltur Buerk
quelle