GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich alle Dateien aus einem Verzeichnis löschen, wenn die Argumentliste zu lang gemeldet wird?

Lösung 1:

find . -maxdepth 1 -type f -exec rm -f {} \;

es dauert einfach zu lange (eine Ausführung von rm pro Datei).

dieser ist viel effizienter:

find . -maxdepth 1 -type f -print0 | xargs -r0 rm -f

da es so viele Dateinamen wie möglich als Argument für rm braucht, dann läuft rm mit der nächsten Ladung von Dateinamen... es kann passieren, dass rm nur 2 oder 3 mal aufgerufen wird.

Lösung 2:

Falls Sie das Verzeichnis nicht entfernen können, können Sie immer find.

verwenden
find . -maxdepth 1 -type f -exec rm -f {} \;

Das löscht alle Dateien im aktuellen Verzeichnis und nur das aktuelle Verzeichnis (keine Unterverzeichnisse).

Lösung 3:

Beides wird das Problem umgehen. Eine Analyse der jeweiligen Performance der einzelnen Techniken gibt es hier.

find . -name WHATEVER -exec rm -rf {} \;

oder

ls WHATEVER | xargs rm -rf

Das Problem rührt von Bash her, das "*" mit jedem einzelnen Element im Verzeichnis erweitert. Diese beiden Lösungen arbeiten stattdessen jede Datei der Reihe nach ab.

Lösung 4:

Ich konnte dies tun, indem ich eine Ebene sicherte:

cd ..

Und läuft:

rm directory name -rf

Und dann das Verzeichnis neu erstellen.

Lösung 5:

All diese Find-Aufrufe sind sehr nett, aber ich erinnere mich selten genau an die Nomenklatur, die ich brauche, wenn ich in Eile bin:Stattdessen verwende ich ls. Wie jemand erwähnt, ls . würde funktionieren, aber ich bevorzuge ls -1 wie in:

ls-1 | xargs -n 100 rm -rf

Es ist ziemlich sicher, mit der Zahl -n xxx herumzuspielen, da das Überschreiten des Maximums entweder automatisch korrigiert wird (wenn size-max überschritten wird; siehe -s ) oder wenn das args-max für eine App überschritten wird, wird dies normalerweise eher der Fall sein offensichtlich.

Es sollte beachtet werden, dass grep praktisch ist, um es in der Mitte dieser Kette einzufügen, wenn Sie nur eine Teilmenge von Dateien in einem großen Verzeichnis löschen und aus irgendeinem Grund find nicht verwenden möchten.

Diese Antwort geht davon aus, dass Sie Gnu-Core-Dienstprogramme für Ihre ls, xargs &etc. verwenden.


Linux
  1. So finden Sie eine Datei in Linux rekursiv in allen Verzeichnissen

  2. Wie lösche ich alle Dateien mit einer bestimmten Erweiterung in einem bestimmten Ordner?

  3. Wie man alle Dateien und Verzeichnisse rekursiv auflistet

  4. Wie kann ich die 5 zuletzt geänderten Dateien in einem Verzeichnis auflisten (ls)?

  5. Wie listet man kürzlich gelöschte Dateien aus einem Verzeichnis auf?

Wie kann ich alle eindeutigen Dateien in zwei Verzeichnissen finden / auflisten?

Wie finde ich alle fest verlinkten Dateien in einem Dateisystem?

Wie lösche ich alle Dateien in einem Verzeichnis außer einigen?

Wie kann ich leere Verzeichnisse in meinem Home-Verzeichnis rekursiv löschen?

Wie kann ich alle leeren Dateien und Verzeichnisse in Linux rekursiv löschen?

Wie listet man alle Dateien einer Partition unter Linux auf?