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?
7
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 find
dies aus Sicht des Speicherplatzverbrauchs möglicherweise nicht optimal ist, da die Verzeichnisgröße erst danach reduziert wird fsck
. Details .
Problemumgehung Nr. 1:
Problemumgehung Nr. 2:
quelle
-name "*"
, um alle Dateien zu finden. Dies wird standardmäßig festgestellt.-name "*"
scheint etwas überflüssig zu sein. Können Sie erklären, warum Sie dies anstelle von nur a gewählt habenfind /path/to/dir -delete
, außer nur denselben Glob wie das OP zu verwenden?find
"*" enthält "*" möglicherweise keine Dateien, die mit einem "" beginnen. (Aktuelle Versionen von findutils enthalten diese gepunkteten Dateien).Verwenden
find
ist 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 entwederls
mitxargs
, wenn keine Sonderzeichen vorhanden sind, oderfind
mit bestimmten Optionen verwenden.oder
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-depth
wird zuerst in Verzeichnisse schauen, wodurch ein Fehler "Verzeichnis nicht leer" vermieden wird. Wenn das-not
Argument auf Ihrem System nicht verfügbar ist, verwenden Sie!
.quelle
ls
und erwarten Sie nicht , dass Dinge kaputt gehen. Schlecht. mywiki.wooledge.org/ParsingLs