Das Problem
Beim Versuch, eine große Anzahl von Dateien über die Befehlszeile aufzulisten oder mit ihnen zu interagieren, wird folgender Fehler ausgegeben:
$ ls -l *.xml | wc -l bash: /bin/ls: Argument list too long 0
$ rm *.xml bash: /bin/rm: Argument list too long
oder beim Versuch, eine große Anzahl von Dateien mit dem Befehl find zu löschen, schlägt dies mit der folgenden Fehlermeldung fehl:
$ find /u01/oracle/apps/fs1/EBSapps/appl/xdo/12.0.0/temp/*.xml -mtime +120 -exec rm -v {} \; bash: /usr/bin/find: Argument list too long
Die Lösung
Es gibt ein großes, aber endliches Limit für die Befehlszeile, das vom Kernel auferlegt wird, und die oben gezeigten Fehler zeigen an, dass das Limit erreicht wurde.
Um dies zu umgehen, kann xargs verwendet werden, das eine Liste von Dateinamen von seiner Standardeingabe akzeptiert und den Befehl darauf ausführt. Sie können „find“ in Kombination mit „xargs“ wie folgt verwenden:
# find . -type f -name '*.xml' | xargs rm
HINWEIS :Der obige Befehl löscht alle Dateien mit der Erweiterung .xml im aktuellen Verzeichnis ohne Bestätigung. Ich würde Ihnen empfehlen, vor der Ausführung zuerst eine Sicherungskopie der erforderlichen Dateien zu erstellen. Es ist immer gut, dies auf einer Testmaschine zu überprüfen und zu überprüfen, bevor Sie mit der Produktionsmaschine fortfahren.