Arbeitet man mit grossen Verzeichnissen, so erscheint irgendwann bei Kommandos mit Wildcards wie zum Beispiel ls *.txt die Fehlermeldung “Argument list too long”. Der Grund liegt in der Verarbeitung von Wildcards. Diese werden nicht etwa vom jeweiligen Programm verarbeitet, sondern von der Shell. Das Programm erfaehrt also nicht von den Platzhaltern, sondern bekommt von der Shell bereits eine Liste mit expandierten Dateinamen. Wird diese Liste zu lang, so kommt es zu obiger Fehlermeldung.

Will man nur das einfache “ls” Kommando ausfuehren so kann man sich mit folgendem Trick behelfen: ls | grep “.txt”

Hier wird auf Wildcards verzichtet. Es findet keine Expansion statt. Das nachgeschaltete “grep” Kommando sucht nun die Dateien mit der passenden Erweiterung heraus. Will man die Dateienamen allerdings nicht nur anzeigen, sondern benutzen um ein Kommando mit ihnen auszufuehren bringt dieser Ansatz nicht weiter.

Abhilfe schaft das “xargs” Kommando. Dieses Tool liesst eine Liste von Dateinamen und zerteilt sie in kleinere Haeppchen die sich zur Weiterverarbeitung eignen.

Sollen beispielsweise alle “.txt” Dateien zu einem Tar Archiv zusammengefasst werden, so benutzt man folgendes Konstrukt:

ls | grep “.txt” | xargs tar -rf TextArchiv.tar

Das ls Kommando listet nun alle Dateien auf. Das grep Kommando filtert die Dateien mit der Erweiterung “.txt” heraus, das xargs Kommando zerteilt diese Liste in mehrere Bloecke und ruft mit jedem Block das Tar Kommando auf. Der Parameter “-r” des Tar Kommando sorgt dafuer, dass die Bloecke zu einem einzigen Archiv zusammengefasst werden.