
Die xargs
Mit dem Dienstprogramm können Sie Befehle über die Standardeingabe erstellen und ausführen. Es wird normalerweise in Kombination mit anderen Befehlen durch Rohrleitungen verwendet.
Mit xargs
, können Sie die Standardeingabe als Argument für Befehlszeilenprogramme wie mkdir
bereitstellen und rm
.
In diesem Tutorial behandeln wir die Grundlagen der Verwendung von xargs
Befehl.
So verwenden Sie Linux xargs
Befehl #
xargs
liest Argumente aus der Standardeingabe, getrennt durch Leerzeichen oder Zeilenumbrüche, und führt den angegebenen Befehl unter Verwendung der Eingabe als Argumente des Befehls aus. Wenn kein Befehl angegeben wird, ist der Standardwert /bin/echo
.
Die Syntax für die xargs
Befehl lautet wie folgt:
xargs [OPTIONS] [COMMAND [initial-arguments]]
Das grundlegendste Beispiel für die Verwendung von xargs
wäre, mehrere durch Leerzeichen getrennte Zeichenfolgen mit einer Pipe an xargs
zu übergeben und führen Sie einen Befehl aus, der diese Zeichenfolgen als Argumente verwendet.
echo "file1 file2 file3" | xargs touch
Im obigen Beispiel leiten wir die Standardeingabe an xargs
weiter , und die touch
Der Befehl wird für jedes Argument ausgeführt, wodurch drei Dateien erstellt werden. Dies ist dasselbe, als ob Sie Folgendes ausführen würden:
touch file1 file2 file3
Wie man den Befehl anzeigt und den Benutzer auffordert #
Um den Befehl auf dem Terminal auszugeben, bevor Sie ihn ausführen, verwenden Sie den -t
(--verbose
) Option:
echo "file1 file2 file3" | xargs -t touch
touch file1 file2 file3
Wenn Sie gefragt werden möchten, ob Sie jeden Befehl ausführen möchten, bevor Sie ihn ausführen, verwenden Sie -p
(--interactive
) Option:
echo "file1 file2 file3" | xargs -p touch
Geben Sie y
ein oder Y
um den Befehl zu bestätigen und auszuführen:
touch file1 file2 file3 ?...y
Diese Option ist nützlich, wenn destruktive Befehle ausgeführt werden.
So begrenzen Sie die Anzahl der Argumente #
Standardmäßig wird die Anzahl der an den Befehl übergebenen Argumente durch das Limit des Systems bestimmt.
Das -n
(--max-args
) Option gibt die Anzahl der Argumente an, die an den angegebenen Befehl übergeben werden sollen. xargs
führt den angegebenen Befehl so oft wie nötig aus, bis alle Argumente erschöpft sind.
Im folgenden Beispiel ist die Anzahl der Argumente, die von der Standardeingabe gelesen werden, auf 1 begrenzt.
echo "file1 file2 file3" | xargs -n 1 -t touch
Wie Sie der ausführlichen Ausgabe unten entnehmen können, wird der touch-Befehl für jedes Argument separat ausgeführt:
touch file1
touch file2
touch file3
So führen Sie mehrere Befehle aus #
Um mehrere Befehle mit xargs
auszuführen verwenden Sie das -I
Möglichkeit. Es funktioniert durch die Definition eines replace-str
nach dem -I
Option und alle Vorkommen des replace-str
werden durch das an xargs übergebene Argument ersetzt.
Die folgenden xargs
Beispiel wird zwei Befehle ausführen, zuerst werden die Dateien mit touch
erstellt , und dann werden die Dateien mit dem ls
aufgelistet Befehl:
echo "file1 file2 file3" | xargs -t -I % sh -c '{ touch %; ls -l %; }'
-rw-r--r-- 1 linuxize users 0 May 6 11:54 file1
-rw-r--r-- 1 linuxize users 0 May 6 11:54 file2
-rw-r--r-- 1 linuxize users 0 May 6 11:54 file3
Eine übliche Wahl für replace-str
ist %
. Sie können jedoch einen anderen Platzhalter verwenden, zum Beispiel ARGS
:
echo "file1 file2 file3" | xargs -t -I ARGS sh -c '{ touch ARGS; ls -l ARGS; }'
So geben Sie ein Trennzeichen # an
Verwenden Sie das -d
(--delimiter
) Option zum Festlegen eines benutzerdefinierten Trennzeichens, das entweder ein einzelnes Zeichen oder eine Escape-Sequenz sein kann, die mit \
beginnt .
Im folgenden Beispiel verwenden wir ;
als Trennzeichen:
echo "file1;file2;file3" | xargs -d \; -t touch
touch file1 file2 file3
So lesen Sie Elemente aus Datei #
Der Befehl xargs kann auch Elemente aus einer Datei anstelle der Standardeingabe lesen. Verwenden Sie dazu das -a
(--arg-file
) Option gefolgt vom Dateinamen.
Im folgenden Beispiel sind die xargs
Der Befehl liest die ips.txt
Datei und pingen Sie jede IP-Adresse.
8.8.8.8
1.1.1.1
Wir verwenden auch den -L 1
Option, die xargs
anweist eine Zeile nach der anderen zu lesen. Wenn diese Option weggelassen wird xargs
leitet alle IPs an einen einzigen ping
weiter Befehl.
xargs -t -L 1 -a ips.txt ping -c 1
ping -c 1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=50 time=68.1 ms
...
ping -c 1 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=59 time=21.4 ms
Mit xargs
mit find
#
xargs
wird am häufigsten in Kombination mit find
verwendet Befehl. Sie können find
verwenden um nach bestimmten Dateien zu suchen und dann xargs
zu verwenden Operationen an diesen Dateien auszuführen.
Um Probleme mit Dateinamen zu vermeiden, die Zeilenumbrüche oder andere Sonderzeichen enthalten, verwenden Sie immer den find -print0
Option, die find
bewirkt to gibt den vollständigen Dateinamen gefolgt von einem Nullzeichen aus. Diese Ausgabe kann von xargs
korrekt interpretiert werden mit dem -0
, (--null
)-Option.
Im folgenden Beispiel find
gibt die vollständigen Namen aller Dateien in /var/www/.cache
aus Verzeichnis und xargs
übergibt die Dateipfade an rm
Befehl:
find /var/www/.cache -type f -print0 | xargs -0 rm -f
Verwenden von xargs zum Trimmen von Whitespace-Zeichen #
xargs
kann auch als Werkzeug verwendet werden, um Leerzeichen von beiden Seiten einer bestimmten Zeichenfolge zu entfernen. Leiten Sie die Zeichenfolge einfach an xargs
weiter Befehl, und es wird das Trimmen durchführen:
echo " Long line " | xargs
Long line
Dies kann nützlich sein, wenn Strings in Shell-Skripten verglichen werden.
#!/bin/bash
VAR1=" Linuxize "
VAR2="Linuxize"
if [[ "$VAR1" == "$VAR2" ]]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
## Using xargs to trim VAR1
if [[ $(echo "$VAR1" | xargs) == "$VAR2" ]]; then
echo "Strings are equal."
else
echo "Strings are not equal."
fi
Strings are not equal.
Strings are equal.
Schlussfolgerung #
xargs
ist ein Befehlszeilendienstprogramm unter Linux, mit dem Sie Befehle erstellen und ausführen können.
Für detailliertere Informationen zu jedem xargs
Option, lesen Sie die xargs-Manpage.
Wenn Sie Fragen oder Feedback haben, können Sie gerne einen Kommentar hinterlassen.