Android

Xargs Befehl unter Linux

Linux Tutorial Teil 4 - erstes praktisches Bash-Script

Linux Tutorial Teil 4 - erstes praktisches Bash-Script

Inhaltsverzeichnis:

Anonim

Mit dem Dienstprogramm xargs können Sie Befehle über die Standardeingabe erstellen und ausführen. Es wird normalerweise in Kombination mit anderen Befehlen über Rohrleitungen verwendet.

Mit xargs können Sie Standardeingaben als Argument für Befehlszeilendienstprogramme wie mkdir und rm mkdir .

In diesem Lernprogramm werden die Grundlagen der Verwendung des Befehls xargs .

Verwendung des Linux-Befehls xargs

xargs liest Argumente aus der Standardeingabe, die durch Leerzeichen oder Zeilenumbrüche getrennt sind, und führt den angegebenen Befehl unter Verwendung der Eingabe als Befehlsargumente aus. Wenn kein Befehl angegeben wird, lautet die Standardeinstellung /bin/echo .

Die Syntax für den Befehl xargs lautet wie folgt:

xargs]

Das grundlegendste Beispiel für die Verwendung von xargs wäre, mehrere durch Leerzeichen getrennte Zeichenfolgen mit einer Pipe an xargs und einen Befehl auszuführen, der diese Zeichenfolgen als Argumente verwendet.

echo "file1 file2 file3" | xargs touch

Im obigen Beispiel leiten wir die Standardeingabe an xargs , und der Befehl touch wird für jedes Argument ausgeführt, wodurch drei Dateien erstellt werden. Dies ist das gleiche, als ob Sie laufen würden:

touch file1 file2 file3

Anzeigen des Befehls und Auffordern des Benutzers

Um den Befehl vor der Ausführung auf dem Terminal auszudrucken, verwenden Sie die Option -t ( --verbose ):

echo "file1 file2 file3" | xargs -t touch

touch file1 file2 file3

echo "file1 file2 file3" | xargs -p touch

Geben Sie y 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 Systemlimit bestimmt.

Die Option -n ( --max-args ) gibt die Anzahl der Argumente an, die an den angegebenen Befehl übergeben werden sollen. xargs führt den angegebenen Befehl so oft 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 Befehl touch für jedes Argument separat ausgeführt:

touch file1 touch file2 touch file3

So führen Sie mehrere Befehle aus

Verwenden Sie die Option -I um mehrere Befehle mit xargs auszuführen. Es funktioniert, indem nach der Option -I ein replace-str definiert wird und alle Vorkommen der replace-str durch das an xargs übergebene Argument ersetzt werden.

Im folgenden xargs Beispiel werden zwei Befehle ausgeführt. Zunächst werden die Dateien mit touch und anschließend werden die Dateien mit dem Befehl ls aufgelistet:

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 häufige Wahl für replace-str ist % . Sie können jedoch einen anderen Platzhalter verwenden, z. B. ARGS :

echo "file1 file2 file3" | xargs -t -I ARGS sh -c '{ touch ARGS; ls -l ARGS; }'

Festlegen eines Trennzeichens

Verwenden Sie die Option -d ( --delimiter ), um ein benutzerdefiniertes Trennzeichen --delimiter , das entweder ein einzelnes Zeichen oder eine mit \ beginnende Escape-Sequenz sein kann.

Das folgende Beispiel verwenden wir ; als Begrenzer:

echo "file1;file2;file3" | xargs -d ; -t touch

touch file1 file2 file3

So lesen Sie Elemente aus einer Datei

Der Befehl xargs kann anstelle der Standardeingabe auch Elemente aus einer Datei lesen. Verwenden Sie dazu die Option -a ( --arg-file ) gefolgt vom Dateinamen.

Im folgenden Beispiel liest der Befehl xargs die Datei ips.txt und ips.txt jede IP-Adresse.

ips.txt

8.8.8.8 1.1.1.1

Wir verwenden auch die Option -L 1 , mit der xargs angewiesen wird, jeweils eine Zeile zu lesen. Wenn diese Option weggelassen wird, leitet xargs alle IPs an einen einzelnen ping Befehl weiter.

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

Verwenden von xargs mit find

xargs wird am häufigsten in Kombination mit dem Befehl find . Mit find können find nach bestimmten Dateien suchen und anschließend mit xargs Vorgänge für diese Dateien ausführen.

Um Probleme mit Dateinamen zu vermeiden, die Zeilenumbrüche oder andere Sonderzeichen enthalten, verwenden Sie immer die Option find -print0 gibt find den vollständigen Dateinamen gefolgt von einem Nullzeichen aus. Diese Ausgabe kann von xargs mit der Option -0 , ( --null ) korrekt interpretiert werden.

Im folgenden Beispiel gibt find den vollständigen Namen aller Dateien im Verzeichnis /var/www/.cache und xargs /var/www/.cache die Dateipfade an den Befehl rm :

find /var/www/.cache -type f -print0 | xargs -0 rm -f

Verwenden von Xargs zum Trimmen von Leerzeichen

xargs kann auch als Werkzeug zum Entfernen von Leerzeichen von beiden Seiten einer bestimmten Zeichenfolge verwendet werden. Leiten Sie die Zeichenfolge einfach an den Befehl xargs , und das Zuschneiden wird ausgeführt:

echo " Long line " | xargs

Long line

Dies kann nützlich sein, wenn Sie Zeichenfolgen in Shell-Skripten vergleichen.

#!/bin/bash VAR1=" Linuxize " VAR2="Linuxize" if]; then echo "Strings are equal." else echo "Strings are not equal." fi ## Using xargs to trim VAR1 if]; then echo "Strings are equal." else echo "Strings are not equal." fi

Strings are not equal. Strings are equal.

Fazit

xargs ist ein Befehlszeilenprogramm unter Linux, mit dem Sie Befehle erstellen und ausführen können.

Ausführlichere Informationen zu den einzelnen xargs Optionen finden Sie in der xargs-Manpage.

xargs terminal