Xargs: Unterschied zwischen den Versionen

Aus Foxwiki
Subpages:
 
(9 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 5: Zeile 5:
* Unter Linux/UNIX kann man fast alle Befehle auf einzelne Datei oder auch auf eine ganze Liste von Dateien anwenden.
* Unter Linux/UNIX kann man fast alle Befehle auf einzelne Datei oder auch auf eine ganze Liste von Dateien anwenden.
* Wenn dies nicht möglich sein sollte oder sich eine Dateiliste nicht mit Wildcards erstellen lässt, kann man das Kommando xargs verwenden.
* Wenn dies nicht möglich sein sollte oder sich eine Dateiliste nicht mit Wildcards erstellen lässt, kann man das Kommando xargs verwenden.
* Wenn viele Dateien (manchmal über den Verzeichnisbaum verteilt) gleichartig behandeln werden sollen, ob die Dateien nun gelöscht, der Eigentümer oder die Zugriffsrechte geändert werden soll, ist ''find(1)'' eine gute lösung.
* Wenn viele Dateien (manchmal über den Verzeichnisbaum verteilt) gleichartig behandeln werden sollen, ob die Dateien nun gelöscht, der Eigentümer oder die Zugriffsrechte geändert werden soll, ist ''find(1)'' eine gute Lösung
find / -user toelpel -exec rm \{\} \;
<syntaxhighlight lang="bash" highlight="1" line>
find / -user toelpel -exec rm \{\} \;
</syntaxhighlight>


Sollen viele Dateien bearbeiten werden wird für jede Datei ein eigene Befehl abgesetzt.
Sollen viele Dateien bearbeiten werden wird für jede Datei ein eigene Befehl abgesetzt.
Zeile 14: Zeile 16:


== Installation ==
== Installation ==
<syntaxhighlight lang="bash" highlight="1" line>
''xargs'' ist Teil des Pakets [[findutils]]


</syntaxhighlight>
== Aufruf ==
== Aufruf ==
<syntaxhighlight lang="bash" highlight="1" line>
<syntaxhighlight lang="bash" highlight="1" line>
Zeile 73: Zeile 74:
=== Exit-Status ===
=== Exit-Status ===


== Anwendung ==
=== Problembehebung ===
== Konfiguration ==
== Konfiguration ==
=== Dateien ===
=== Dateien ===
Zeile 95: Zeile 94:


[[Kategorie:Linux/Befehl]]
[[Kategorie:Linux/Befehl]]
[[Kategorie:findutils]]
</noinclude>
</noinclude>
= TMP =
== Beschreibung ==
$ '''type xargs'''
xargs ist /usr/bin/xargs
* Diese Handbuchseite dokumentiert die GNU-Version von xargs. xargs liest Elemente aus der Standardeingabe, die durch Leerzeichen (die durch doppelte oder einfache Anführungszeichen oder einen Backslash geschützt werden können) oder Zeilenumbrüche getrennt sind, und führt den Befehl (Standard ist echo) ein- oder mehrmals mit beliebigen Anfangsargumenten aus, gefolgt von Elementen, die aus der Standardeingabe gelesen werden. Leerzeilen in der Standardeingabe werden ignoriert.
* Die Befehlszeile für den Befehl wird aufgebaut, bis sie eine vom System definierte Grenze erreicht (es sei denn, die Optionen -n und -L werden verwendet). Der angegebene Befehl wird so oft aufgerufen, wie nötig, um die Liste der Eingabepositionen zu verwenden. Im Allgemeinen wird es viel weniger Aufrufe des Befehls geben, als es Positionen in der Eingabe gab. Dies hat normalerweise erhebliche Leistungsvorteile. Einige Befehle können auch parallel ausgeführt werden; siehe Option -P.
* Da Unix-Dateinamen Leerzeichen und Zeilenumbrüche enthalten können, ist dieses Standardverhalten oft problematisch; Dateinamen, die Leerzeichen und/oder Zeilenumbrüche enthalten, werden von xargs falsch verarbeitet. In diesen Situationen ist es besser, die Option -0 zu verwenden, die solche Probleme verhindert. Wenn Sie diese Option verwenden, müssen Sie sicherstellen, dass das Programm, das die Eingabe für xargs erzeugt, auch ein Nullzeichen als Trennzeichen verwendet. Wenn es sich bei diesem Programm beispielsweise um GNU find handelt, erledigt die Option -print0 dies für Sie.
* Wenn ein Aufruf des Befehls mit dem Status 255 beendet wird, stoppt xargs sofort, ohne weitere Eingaben zu lesen. In diesem Fall wird eine Fehlermeldung auf stderr ausgegeben.
== Installation ==
== Syntax ==
=== Parameter ===
== Dokumentation ==

Aktuelle Version vom 23. Dezember 2024, 16:15 Uhr

xargs - Befehlszeilen von der Standardeingabe erstellen und ausführen

Beschreibung

xargs erwartet als Parameter ein Kommando, welches dann auf Dateien einer Liste angewandt wird, die von der Standardeingabe gelesen werden.

  • Unter Linux/UNIX kann man fast alle Befehle auf einzelne Datei oder auch auf eine ganze Liste von Dateien anwenden.
  • Wenn dies nicht möglich sein sollte oder sich eine Dateiliste nicht mit Wildcards erstellen lässt, kann man das Kommando xargs verwenden.
  • Wenn viele Dateien (manchmal über den Verzeichnisbaum verteilt) gleichartig behandeln werden sollen, ob die Dateien nun gelöscht, der Eigentümer oder die Zugriffsrechte geändert werden soll, ist find(1) eine gute Lösung
find / -user toelpel -exec rm \{\} \;

Sollen viele Dateien bearbeiten werden wird für jede Datei ein eigene Befehl abgesetzt.

  • Findet find(1) nun 2000 Dateien des Users toelpel, werden (hintereinander) 2000 Prozesse gestartet, die jeweils eine Datei löschen.
  • Das verlangsamt den Vorgang und erzeugt unnötig Last.
  • rm(1) kann mehrere Dateien auf einmal löschen, ein einzelnes rm(1)-Kommando mit 2000 Argumenten wäre sinnvoller.

Installation

xargs ist Teil des Pakets findutils

Aufruf

xargs [options] [command [initial-arguments]]

xargs wird mit folgender Syntax in einem Terminal aufgerufen.

  • Kommando1 | xargs [Optionen] Kommando2
  • Hierbei wird das "Kommando2" mit den Argumenten aufgerufen, die das "Kommando1" auf die Standardausgabe gibt.

xargs(1) hat die Funktion Kommandozeilen aus Standard-Input zu erstellen und auszuführen.

find / -user toelpel -print | xargs rm

find(1) listet alle Dateien des Users toelpel auf und reicht sie über die Pipe an xargs weiter. xargs(1) nimmt die Liste von der Standardeingabe und bastelt daraus und aus dem rm(1), was ihm als Argument übergeben wurde, ein rm(1)-Kommando mit 2000 Argumenten.

  • Ergebnis: 3 Prozesse anstelle von 2001 Prozessen in der ersten Variante, um 2000 Dateien zu löschen.

Optionen

Unix GNU Parameter Beschreibung
-a --arg-file= [Datei] Liest die Argumente aus einer Datei anstatt von der Standardeingabe
-0 --null Argumente werden aufgrund des NULL-Zeichens getrennt anstatt des Leerzeichen
  • Jedes Zeichen wird wörtlich genommen
  • Nützlich in Kombination mit der -print0 Option von find
-d --delimiter= [Trennzeichen] Argumente werden aufgrund des Trennzeichens getrennt anstatt des Leerzeichens
  • Jedes Zeichen wird wörtlich genommen
  • Das Trennzeichen kann ein einzelnes Zeichen sein, ein escaptes Zeichen, ein oktaler oder ein hexadezimaler Code
  • Mehrere Zeichen sind nicht erlaubt
--help Hilfe anzeigen
-i Standardmäßig wird "{}" als Ersatz-Zeichenkette verwendet, wie bei der Aktion -exec des Befehls find
  • xargs fügt dann die Dateiliste an der Stelle ein, wo die Ersatz-Zeichenkette steht
  • Dies kommt zur Anwendung wenn der Befehl die von xargs erzeugte Dateiliste nicht am Ende erwartet
-p --interactive Fragt vor jeder Ausführung, ob fortgefahren werden soll
-r --no-run-if-empty Führt "Kommando2" nicht aus, wenn die Standardeingabe keine Nicht-Leerzeichen enthält
-n --max-args Führt "Kommando2" auf jeweils eine bestimmt Anzahl von übergebenen Argumenten aus
-P --max-procs Führt "Kommando2" mehrfach aus
  • Mit der Kombination mit -n kann so eine bessere Auslastung des Systems erreicht werden
-t --verbose Gibt mehr Informationen darüber, was gemacht wird

Parameter

Umgebungsvariablen

Exit-Status

Konfiguration

Dateien

Anhang

Siehe auch

Dokumentation

Man-Page
  1. xargs(1)
Info-Pages

Links

Projekt
Weblinks