Entfernen Sie viele, viele Dateien aus einem Ordner

7

Ich habe einen Ordner mit 137795 Dateien. Ich muss alle löschen. Wenn ich renne rm *bekomme ich -bash: /bin/rm: Argument list too long. Wie komme ich an diesem Fehler vorbei?

David Oneill
quelle

Antworten:

15

Wie ich sehen kann, müssen Sie Ihr Verzeichnis nicht entfernen, sondern nur Dateien darin. So können Sie es neu erstellen

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

oder sogar nur Dateien darin löschen

find /path/to/dir -type f -delete

Zuerst arbeitet man schneller.

UPD. Beachten Sie, dass finddies aus Sicht des Speicherplatzverbrauchs möglicherweise nicht optimal ist, da die Verzeichnisgröße erst danach reduziert wird fsck. Details .

eilen
quelle
Danke - ich wusste, dass es eine elegante Lösung geben würde.
David Oneill
3

Problemumgehung Nr. 1:

find /path/to/dir -delete

Problemumgehung Nr. 2:

rm a*;

rm b*;

rm c*;

etc
diffycat
quelle
4
Sie müssen nicht hinzufügen -name "*", um alle Dateien zu finden. Dies wird standardmäßig festgestellt.
Eile
Die Verwendung -name "*"scheint etwas überflüssig zu sein. Können Sie erklären, warum Sie dies anstelle von nur a gewählt haben find /path/to/dir -delete, außer nur denselben Glob wie das OP zu verwenden?
jsbillings
Abhängig von der Implementierung oder dem Alter Ihres find"*" enthält "*" möglicherweise keine Dateien, die mit einem "" beginnen. (Aktuelle Versionen von findutils enthalten diese gepunkteten Dateien).
jsbillings
-1

Verwenden findist wahrscheinlich die beste Wahl. Einige der Probleme mit den anderen Antworten bestehen entweder darin, nicht alles im Verzeichnis zu löschen oder das Verzeichnis selbst zu löschen. Sie können entweder lsmit xargs, wenn keine Sonderzeichen vorhanden sind, oder findmit bestimmten Optionen verwenden.

ls -1 | xargs rm -r

oder

find . -depth -path ./.* -prune -o -not -name . -delete

Dadurch werden alle Elemente im aktuellen Verzeichnis, die mit .( -prune) beginnen, ignoriert und alle anderen Dateien oder Verzeichnisse entfernt, sofern es sich nicht um das oberste Verzeichnis ( .) handelt. Das -depthwird zuerst in Verzeichnisse schauen, wodurch ein Fehler "Verzeichnis nicht leer" vermieden wird. Wenn das -notArgument auf Ihrem System nicht verfügbar ist, verwenden Sie !.

Arcege
quelle
5
Analysieren Sie nichtls und erwarten Sie nicht , dass Dinge kaputt gehen. Schlecht. mywiki.wooledge.org/ParsingLs
Chris Down
1
Ich hatte das oben erwähnt: "Wenn es keine Sonderzeichen gibt".
Arcege