Linux-Befehle · 7 min read · Sep 20, 2025

8 Praktische Beispiele des Linux Xargs-Befehls für Anfänger

Der Linux-Befehl xargs ist vielleicht kein sehr beliebtes Kommandozeilenwerkzeug, aber das ändert nichts an der Tatsache, dass es äußerst nützlich ist, insbesondere in Kombination mit anderen Befehlen wie find und grep. Wenn Sie xargs noch nicht kennen und seine Verwendung verstehen möchten, werden Sie erfreut sein zu erfahren, dass wir genau das hier tun werden.

Bevor wir fortfahren, beachten Sie bitte, dass alle in diesem Tutorial präsentierten Beispiele auf Ubuntu 22.04 LTS getestet wurden. Die Shell, die auf meinem System verwendet wird, ist Bash.

1. Wie funktioniert der Xargs-Befehl?

Nun, bevor wir zu seiner Verwendung übergehen, ist es wichtig zu verstehen, was genau Xargs tut. In einfachen Worten liest das Werkzeug - in seiner grundlegendsten Form - Daten von der Standardeingabe (stdin) und führt den Befehl (der ihm als Argument übergeben wird) ein oder mehrere Male basierend auf den gelesenen Eingaben aus. Alle Leerzeichen und Abstände in der Eingabe werden als Trennzeichen behandelt, während leere Zeilen ignoriert werden.

Wenn kein Befehl als Argument an xargs übergeben wird, ist der Standardbefehl, den das Werkzeug ausführt, echo. Zum Beispiel habe ich im folgenden Beispiel einfach ‘xargs’ ausgeführt und ‘Hello World’ auf stdin eingegeben. Als ich Ctrl+D drückte (um xargs mitzuteilen, dass wir mit der Eingabe fertig sind), wurde der echo-Befehl automatisch ausgeführt, und ‘Hello World’ wurde erneut ausgegeben.

2. Wie verwendet man xargs mit einem anderen Befehl?

Während echo der Standardbefehl ist, den xargs ausführt, können Sie ausdrücklich jeden anderen Befehl angeben. Zum Beispiel können Sie den Befehl find zusammen mit seiner ‘-name’-Option als Argument an xargs übergeben und dann den Namen der Datei (oder den Typ der Dateien), die Sie finden möchten, als Eingabe über stdin übergeben.

Hier ist der vollständige Befehl:

xargs find -name

Zum Beispiel haben wir “.txt” als Eingabe über stdin bereitgestellt, was bedeutet, dass wir möchten, dass der find*-Befehl alle .txt-Dateien im aktuellen Verzeichnis (sowie in seinen Unterverzeichnissen) durchsucht.

Hier ist der Befehl in Aktion:

3. Wie lässt man xargs einen Befehl mehrfach ausführen (einmal für jede Eingabezeile/Argument)

Im Beispiel, das wir im vorherigen Abschnitt besprochen haben, wollten wir nach .txt-Dateien suchen, also haben wir “*.txt” in die Eingabe eingegeben. Aber was ist, wenn die Anforderung auch darin besteht, nach anderen Dateitypen wie .log und .tmp zu suchen?

Versuchen Sie, diese nach “*.txt” als Eingabe an xargs zu übergeben und sehen Sie, was passiert. Nun, Sie sollten einen Fehler ähnlich dem folgenden erhalten:

Das liegt daran, dass xargs “.txt” und “.log” als Dateinamen-Eingabe an den find-Befehl übergibt und dann find fehlschlägt, da es mit zwei Dateinamen in der Eingabe ausgeführt wird. Sie können sich den find-Befehl so vorstellen:

find -name "*.txt" "*.log"

Und das ist nicht der richtige Weg.

Was wir wollen, ist, dass der xargs-Befehl zuerst “.txt” an den find-Befehl übergibt, damit find uns Ergebnisse zu .txt-Dateien liefert, und dann wird “.log” übergeben. Dies kann mit der -L-Befehlszeilenoption erreicht werden, die xargs bereitstellt.

Die -L-Befehlszeilenoption erfordert eine Zahl, die sie als die maximale Anzahl von nicht-leeren Zeilen behandelt, die als Eingabe an den Befehl auf einmal übergeben werden sollen. In unserem Fall wird dieser Wert 1 sein, da wir eine Eingabezeile als Eingabe an find auf einmal übergeben möchten.

Hier ist also der Befehl, den wir ausführen sollten:

xargs -L 1 find -name

Der folgende Screenshot zeigt den oben genannten Befehl in Aktion:

xargs input / output

Bisher so gut. Aber was ist, wenn Sie die Eingabe auf folgende Weise übergeben:

"*.txt" "*.log"

Nun, der Befehl wird fehlschlagen, da ‘-L 1’ sicherstellt, dass die gesamte Zeile an den find-Befehl übergeben wird.

In solchen Situationen können Sie die ‘-n’-Befehlszeilenoption verwenden.

Die ‘-n’-Befehlszeilenoption erfordert, ähnlich wie ‘-L’, eine Zahl, die die Anzahl der Argumente darstellt, die Sie xargs pro Befehlszeile übergeben möchten. In dem Fall, den wir gerade besprochen haben, sollten “.txt” und “.log” unterschiedliche Argumente sein, und da wir möchten, dass sie einzeln übergeben werden, müssen wir ‘1’ als Wert für ‘-n’ angeben.

xargs -n 1 find -name

Xargs -n switch

Das sind also die Möglichkeiten, wie wir xargs dazu bringen können, einen Befehl mehrfach auszuführen.

4. Wie lässt man xargs Dateinamen mit Leerzeichen verarbeiten

Wenn Sie sich erinnern, haben wir zu Beginn erwähnt, dass xargs Leerzeichen (sowie Zeilenumbrüche) als Trennzeichen behandelt. Dies kann in Fällen problematisch sein, in denen die Dateinamen, die als Eingabe an xargs übergeben werden, Leerzeichen enthalten.

Zum Beispiel, nehmen wir an, das aktuelle Verzeichnis enthält eine Datei mit dem Namen ‘new music.mp3’, und Sie möchten, dass xargs diesen Namen an mplayer übergibt, damit letzterer die Datei abspielen kann. Wenn Sie den konventionellen Weg gehen, erhalten Sie einen Fehler:

Xargs handle spaces in file names

Das liegt daran, dass aufgrund des Leerzeichens zwischen ‘new’ und ‘music.mp3’ diese als zwei verschiedene Dateien von mplayer behandelt werden. Eine Möglichkeit, dieses Problem zu lösen, besteht darin, einen Backslash zu verwenden, während Sie die Eingabe bereitstellen:

new\\ music.mp3

Die andere Möglichkeit besteht darin, das Trennzeichen zu ändern, was Sie mit der -d-Option tun können. Zum Beispiel können Sie xargs anweisen, nur den Zeilenumbruch als Trennzeichen zu betrachten, was auf folgende Weise geschehen kann:

xargs -d '\n' mplayer

xargs -d switch

5. Wie lässt man xargs Dateinamen mit Zeilenumbrüchen verarbeiten

Jetzt wissen wir, wie wir xargs dazu bringen können, Dateinamen zu verarbeiten, die Leerzeichen enthalten. Aber was ist mit Zeilenumbrüchen? Ja, Dateinamen können auch Zeilenumbrüche enthalten. Zum Beispiel gibt es eine Datei mit dem Namen ‘foo’[newline]’file.txt’. Im Terminal wird der Name als ‘foo?file.txt’ angezeigt.

Nun, nehmen wir an, ich möchte, dass der find-Befehl alle Dateien mit Namen, die mit dem Text ‘foo’ beginnen, findet und dann xargs verwendet, um diese Dateien in gedit zu öffnen. Hier ist der Befehl:

find . -name "foo*" | xargs gedit

Leider schlägt der Befehl fehl, um sein Ziel zu erreichen, da eine neue Datei mit dem Namen ‘foo’ in Gedit geöffnet wird. Das liegt wahrscheinlich daran, dass das Zeilenumbruchzeichen von xargs als Trennzeichen behandelt wird.

Um dieses Problem zu lösen, verwenden Sie die -print0-Option, die find bietet, und kombinieren Sie sie mit der -0-Option von xargs. So erklärt die Man-Seite von find diese Option:

 -print0  
Wahr; gibt den vollständigen Dateinamen auf der Standardausgabe aus, gefolgt von einem Nullzeichen (anstatt des Zeilenumbruchzeichens, das -print verwendet). Dies ermöglicht es, Dateinamen, die Zeilenumbrüche oder andere Arten von Leerzeichen enthalten, korrekt von Programmen zu interpretieren, die die Ausgabe von find verarbeiten. Diese Option entspricht der -0-Option von xargs.

Hier ist also der Befehl, den wir verwenden sollten:

find . -name "foo*" -print0 | xargs -0 gedit

6. Wie findet man Dateien, die einen bestimmten Text enthalten

Der xargs-Befehl ist sehr nützlich, wenn Sie nach Dateien suchen möchten, die einen bestimmten Text/String enthalten. Zum Beispiel, wenn Sie .txt-Dateien finden möchten, die den Text ‘abc’ enthalten, kann dies auf folgende Weise geschehen:

find -name "*.txt" | xargs grep "abc"

Hier ist der Befehl in Aktion:

Wie offensichtlich ist, erhält der xargs-Befehl in diesem Fall seine Eingabe vom find-Befehl.

7. Wie lässt man xargs Eingaben aus einer Datei akzeptieren

Bisher haben wir gesehen, dass xargs Eingaben von stdin (was das Standardverhalten ist) sowie von einem anderen Befehl akzeptiert (im letzten Abschnitt besprochen). Wenn Sie möchten, können Sie xargs auch Eingaben aus einer Datei akzeptieren lassen.

Die -a-Option des Befehls ermöglicht dies. Diese Option erwartet einen Dateinamen - dies wäre die Datei, aus der xargs Eingaben lesen wird.

Zum Beispiel, nehmen wir an, es gibt eine Datei mit dem Namen ‘input.txt’. Sie enthält die Eingabe für xargs (im Grunde genommen sind die Inhalte zwei Dateinamen: testfile1.txt und testfile2.txt). So kann xargs verwendet werden, um Eingaben aus dieser Datei zu lesen und sie an einen anderen Befehl, sagen wir ls, weiterzugeben.

xargs -a input.txt ls -lart

Hier ist der Befehl in Aktion:

8. Wie lässt man xargs um Erlaubnis des Benutzers bitten, bevor ein Befehl ausgeführt wird

Wir haben bereits besprochen, wie Sie xargs dazu bringen können, einen Befehl mehrfach auszuführen (siehe Punkt 3 oben). Aber was ist, wenn Sie möchten, dass xargs jedes Mal um Ihre Erlaubnis fragt, wenn es den Befehl ausführt? Ist das möglich? Ja, das ist es - die -p-Befehlszeilenoption macht es möglich.

Hier ist ein Beispiel, wie Sie xargs im interaktiven Modus ausführen können:

Wir haben hier nur die Oberfläche gekratzt, da es viele andere Funktionen gibt, die der xargs-Befehl in Form von Befehlszeilenoptionen bietet. Versuchen Sie die xargs-Konzepte/Funktionen, die wir in diesem Tutorial erklärt haben, und bei Zweifeln oder Fragen schauen Sie sich die Man-Seite an.

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.