- xargs wandelt die Standardeingabe in Argumente für andere Funktionen um. Befehle und ermöglicht es Ihnen, Tools wie find, rm, grep oder gzip miteinander zu verketten.
- Die wichtigsten Optionen (-0, -I, -n, -P, -p, -t, -a, -d) steuern, wie Daten gelesen, Befehle gebildet und ausgeführt werden.
- Bei destruktiven Befehlen ist äußerste Vorsicht geboten. Um schwerwiegende Fehler zu vermeiden, sollten Sie sich auf Bestätigungen und vorherige Tests verlassen.
- Im Vergleich zu Alternativen wie find -exec bietet xargs eine hohe Flexibilität und Effizienz beim Umgang mit langen Listen und beim parallelen Starten von Prozessen.
Wenn Sie mit dem Terminal de Linux Oftmals wird man früher oder später darauf stoßen xargs und seine eigentümliche Art der BefehlsverkettungEs ist eines jener Hilfsprogramme, die viele Leute übersehen, aber wenn man es gut versteht, spart es einem enorm viel Zeit, insbesondere bei der Bearbeitung vieler Dateien oder sehr langer Ausgaben.
Auch wenn es nicht zu den bekanntesten Befehlen gehört, xargs ist ein sehr leistungsfähiges Werkzeug zur Umwandlung von Standardeingaben in echte Argumente. aus einem anderen Befehl. Dank dessen können Sie beispielsweise Hunderte von Dateien löschen, sie umbenennen, in einer Reihe von Dateien nach Text suchen oder Prozesse parallel starten, ohne sich mit komplizierten Skripten den Kopf zerbrechen zu müssen.
Was genau ist xargs in Linux?
Der Name xargs leitet sich von „extended arguments“ ab und beschreibt sehr gut, was es tut: Es liest Daten von der Standardeingabe (STDIN) und wandelt sie in Argumente für einen anderen Befehl um.Vereinfacht ausgedrückt: Es nimmt das, was aus der Pipe eines Befehls kommt, und verwendet es nach dem nächsten Befehl so, als hätte man es von Hand geschrieben.
Viele Linux-Nutzer verwenden xargs so gut wie nie, aber Seine Nützlichkeit steigt sprunghaft an, wenn man mit langen Listen von Gegenständen arbeitet.Beispiele hierfür sind Dateipfade, Suchergebnisse oder beliebige Textausgaben, die Sie verarbeiten möchten. Damit können Sie wiederkehrende Aufgaben automatisieren und menschliche Fehler minimieren, da das Eintippen endloser Listen entfällt.
In der Praxis wird xargs verwendet, um Zwei Befehle auf sehr flexible Weise miteinander verbinden.Der erste Befehl erzeugt eine Liste von Elementen (zum Beispiel gibt find Dateipfade zurück), und xargs ist dafür zuständig, den zweiten Befehl (zum Beispiel rm, grep, mkdir, gzip…) mit diesen in gültige Argumente umgewandelten Daten zu versorgen.
Fast alle gängigen Distributionen – wie zum Beispiel Debian, Ubuntu und die meisten GNU/Linux-Varianten— xargs ist im Paket coreutils oder findutils vorinstalliert, sodass Sie normalerweise nichts zusätzlich installieren müssen, um es zu verwenden.
Zusätzlich zur Vereinfachung der Arbeit, xargs kann Ihnen auch dabei helfen, Ihr System zu schützen. In Kombination mit interaktiven Optionen oder Vorabprüfungen wird es besonders interessant, wenn man es mit destruktiven Befehlen wie rm oder mv verwendet.
Wie xargs intern funktioniert
Die grundlegende Funktionsweise von xargs ist einfach: Es liest von der Standardeingabe, zerlegt diese Eingabe in "Teile" (Argumente) und erstellt Befehle. Von ihnen. Diese Befehle werden so oft wie nötig ausgeführt, abhängig von den gewählten Optionen und der Anzahl der bei jedem Aufruf übergebenen Argumente.
Wenn xargs keinen expliziten Befehl als Parameter empfängt, Es verwendet standardmäßig den Echo-Befehl.Das bedeutet, dass, wenn Sie einfach xargs ohne weitere Angaben eingeben, die aus der Standardeingabe erstellten Argumente angezeigt werden.
Z.B.Wenn Sie etwas so Einfaches tun wie:
echo "uno dos tres" | xargs
Sie erhalten Folgendes: xargs lance internally echo one two threeDeshalb sehen Sie genau diese Zeile auf dem Bildschirm. Das ist eine schnelle Möglichkeit zu verstehen, wie die Eingabe in Argumente „übersetzt“.
Ein weiteres wichtiges Merkmal ist, dass xargs berücksichtigt Systembeschränkungen, wie beispielsweise die maximale BefehlszeilenlängeAnstatt einen gigantischen Befehl mit Tausenden von Argumenten auf einmal zu erstellen, gruppiert er diese in sinnvolle Blöcke und führt den Befehl gegebenenfalls mehrmals aus, um diese Grenzen nicht zu überschreiten.
All dies geschieht unter Beachtung der Regeln der Argumenttrennung: Standardmäßig werden Leerzeichen, Tabulatoren und Zeilenumbrüche als Trennzeichen betrachtet.Wie wir später sehen werden, lässt sich dieses Verhalten jedoch mit verschiedenen Optionen ändern, um es an Routen mit Leerzeichen anzupassen. spezielle Zeilenumbrüche oder Nulltrennzeichen.
Syntax des xargs-Befehls
Die allgemeine Vorgehensweise zur Verwendung von xargs im Terminal ist sehr kompakt: Sie platzieren einen Befehl, der Daten über die Standardausgabe sendet, fügen eine Pipe hinzu und rufen dann xargs auf. mit den Optionen und dem Zielbefehl, die Sie interessieren.
La grundlegende Syntax würde:
xargs comando
Im typischen Arbeitsablauf würde man etwa so vorgehen:
comando_que_genera_lista | xargs comando_destino
Somit Der Zielbefehl wird mit den Argumenten ausgeführt, die von dem Befehl stammen, der die Liste erzeugt.Jede Gruppe von Elementen, die xargs aus STDIN erstellt, wird als Parameter an den Befehl übergeben und je nach Größe der Liste und den von Ihnen definierten Einschränkungen einmal oder mehrmals aufgerufen.
Wenn Sie den Zielbefehl weglassen, wissen Sie das bereits. xargs verwendet standardmäßig echo und zeigt Ihnen einfach die Argumentrekonstruktion an.Dies ist sehr praktisch zum Testen und Debuggen, bevor man heiklere Aktionen ausführt.
Die wichtigsten xargs-Optionen
xargs bietet eine Vielzahl von Optionen, die steuern, wie es Eingaben liest, wie es Argumente bildet und wie es Befehle ausgibt. Einige dieser Flags sind unerlässlich für den Umgang mit ungewöhnlichen Dateinamen, für interaktives Arbeiten oder um die maximale Leistung aus dem System herauszuholen. Prozesse parallel starten.
Zu den am häufigsten verwendeten Optionen gehören die folgenden (es gibt kurze und lange Versionen):
- -0 oder –nullBei dieser Option geht xargs davon aus, dass die Argumente durch das NULL-Zeichen getrennt sind (
\0) anstelle von Leerzeichen oder Zeilenumbrüchen. Diese Technik ist unerlässlich beim Arbeiten mit Dateinamen, die Leerzeichen, Zeilenumbrüche oder andere problematische Zeichen enthaltenEs wird oft kombiniert mitfind ... -print0um sicherzustellen, dass durch die Zwischenräume nichts kaputt geht. - -ao –arg-file Datei: anstatt den Einlass durch das Standardrohr zu messen, xargs nimmt Argumente aus einer Textdatei entgegen.Jede Zeile oder jedes Trennzeichen in der Datei wird als zu verarbeitendes Argument interpretiert. Dies ist besonders nützlich, wenn Sie eine vorausgefüllte Liste von Pfaden oder Elementen haben.
- -do –delimiter characterDiese Option ermöglicht Ihnen ein benutzerdefiniertes Trennzeichen angeben Die Argumente werden getrennt. Dadurch wird jedes Zeichen wörtlich interpretiert und Leerzeichen werden standardmäßig nicht als Trennzeichen verwendet. Dies ist hilfreich, wenn die Eingabe einem sehr spezifischen Format folgt.
- -po –interaktiv: macht xargs Vor der Ausführung jedes Befehls fragen.Es gibt den auszuführenden Befehl aus und bittet um Bestätigung (üblicherweise mit y/n). Dies ist besonders nützlich, wenn Sie xargs zusammen mit rm, mv oder anderen potenziell destruktiven Aktionen verwenden möchten.
- -I Marker: definiert ein „Token“ oder eine Markierung (wie
{}) Das Im Befehl wird er durch den aktuellen Wert des Eingangs ersetzt.Dies ermöglicht es Ihnen, komplexere Befehle zu erstellen oder das Argument genau an der gewünschten Stelle innerhalb des Befehls zu platzieren. - -n ZahlDies gibt an, wie viele Argumente dem Befehl bei jeder Ausführung übergeben werden. Sie bestimmen die Größe jeder Charge. und Sie vermeiden es, Aktionen mit zu großen Listen auf einmal auszuführen.
- -P-NummerLegt die maximale Anzahl der parallel auszuführenden Prozesse fest. Dies ist eine sehr praktische Methode, um um Aufgaben wie Komprimierung oder rechenintensive Prozesse zu parallelisieren. über viele Dateien hinweg, wodurch die Geschwindigkeit erhöht wird die zeit Gesamtaufgabe.
- -t: teilt xargs mit, dass Gib jeden Befehl auf dem Bildschirm aus, bevor du ihn ausführst.Es ist ein sehr praktisches Debugging-Tool, weil man genau sehen kann, was gestartet wird.
Durch die Kombination dieser Flags können Sie xargs an nahezu jeden Workflow anpassen, von einfachen Dateibereinigungsaufgaben bis hin zu komplexe Skripte, die Daten verarbeiten und diese zwischen mehreren Programmen verknüpfen.
Grundlegende Beispiele zum Verständnis von xargs
Am besten lernt man xargs kennen, indem man es in der Praxis sieht. Im Folgenden finden Sie einige praktische Beispiele, die dies veranschaulichen. Wie man die Ausgabe eines Befehls mithilfe von xargs als Brücke an einen anderen Befehl umleitet und die verschiedenen Möglichkeiten zu nutzen.
Verzeichnisse aus einer Liste erstellen
Stellen Sie sich vor, was Sie wollen mehrere Ordner erstellen deren Namen Sie in einer einzigen Zeile haben. Mit xargs können Sie etwas so Einfaches tun wie:
echo "carpeta1 carpeta2 carpeta3" | xargs mkdir
Hier erzeugt das Echo die Zeichenkette mit den Namen und xargs teilt es in drei separate Argumente auf und übergibt diese an den Befehl mkdir.Das Ergebnis ist, dass im aktuellen Verzeichnis drei Verzeichnisse erstellt werden: folder1, folder2 und folder3, und zwar mit nur einem einzigen Befehl.
Befehle nur nach vorheriger Bestätigung ausführen
Bevor Sie Aktionen ausführen, die Daten löschen könnten, sollten Sie diese überprüfen. Genau dafür ist diese Option gedacht. -pEin einfaches Beispiel wäre:
echo "archivo1 archivo2 archivo3" | xargs -p touch
versichern zu lassen. In diesem Fall ist xargs zeigt den Touch-Befehl mit den beabsichtigten Argumenten an und fragt, ob Sie fortfahren möchten.Wenn Sie bestätigen, werden diese Dateien erstellt (oder deren Änderungsdatum aktualisiert, falls sie bereits vorhanden sind). Diese Vorgehensweise eignet sich hervorragend als „Sicherheitsnetz“, wenn Sie riskantere Kombinationen testen.
Suche nach Text in mehreren Dateien
Eine typische Kombination ist die Verwendung von `find` zum Auffinden von Dateien und `xargs` mit `grep` zur Textsuche in diesen Dateien. Zum Beispiel: Suchen Sie im Verzeichnis /etc alle Dateien mit der Endung .conf, die das Wort enthalten WurzelSie könnten Folgendes verwenden:
find /etc -iname "*.conf" | xargs grep "root"
Hier generiert `find` die Liste der Konfigurationsdateien und xargs kümmert sich um die Übergabe dieser Argumente an grep.Dabei wird in jeder Datei nach dem Wort „root“ gesucht. Dies ist eine sehr schnelle Methode, um viele Konfigurationsdateien mit einem einzigen Befehl zu untersuchen.
Alte Dateien aus einem Verzeichnis löschen
Ein weiterer sehr häufiger Anwendungsfall ist das Bereinigen alter Dateien. Zum Beispiel, um Suche im Verzeichnis /tmp nach allen Dateien, die älter als eine Woche sind, und lösche sie.Man könnte beispielsweise Folgendes tun:
find /tmp -mtime +7 | xargs rm
In diesem Fall listet die Funktion alle Kandidatenrouten auf und xargs ruft rm mit diesen Dateien als Argumenten auf.Bei Massenlöschungen ist es jedoch ratsam, zusätzliche Vorsichtsmaßnahmen zu treffen, wie beispielsweise vorher einen Test mit -print oder verwenden xargs -p rm Vor dem Löschen bestätigen.
Erweiterte Beispiele und Best Practices mit xargs
Über die grundlegenden Beispiele hinaus zeigt xargs sein volles Potenzial erst, wenn man sie kombiniert. Benutzerdefinierte Lesezeichen, parallele Ausführung und NulltrennzeichenHier erweist es sich wahrlich als Schweizer Taschenmesser für Skripte und Automatisierungen.
Dateien sicher löschen mit der Option -0
Wenn Sie alle Dateien löschen möchten .txt aus einem Verzeichnis, die robustesten Es kombiniert „Finden“ mit -print0 und xargs mit -0 Namen mit Leerzeichen korrekt verarbeiten:
find . -type f -name "*.txt" -print0 | xargs -0 rm -f
In diesem Befehl wird Die Funktion `find` generiert eine Liste der .txt-Dateien und trennt die Dateinamen durch ein Nullzeichen. durch -print0Dann xargs mit der Option -0 Es interpretiert diese Nulltrennzeichen und übergibt Dateinamen sicher an rm -f, ohne durch Leerzeichen oder Sonderzeichen verwirrt zu werden.
Benennen Sie Dateien mit einem Präfix mithilfe der Option -I um.
Angenommen, Sie möchten Folgendes hinzufügen: Präfix copia_ zu allen Dateien .jpg aus einem Verzeichnis. xargs ermöglicht es Ihnen, diesen Befehlstyp mithilfe eines Platzhalters zu erstellen, der durch den tatsächlichen Namen jeder Datei ersetzt wird:
ls *.jpg | xargs -I {} mv {} copia_{}
Hier, -I {} weist xargs an, jedes Vorkommen von {} innerhalb des mv-Befehls durch den aktuellen Dateinamen zu ersetzen.Auf diese Weise wird jedes Bild unter demselben Pfad umbenannt, wobei der Name mit „copy_“ beginnt. Dies ist eine sehr praktische Methode für komplexere Umbenennungsvorgänge.
Mit der Option -P können Dateien parallel komprimiert werden.
ls *.log | xargs -n 1 -P 4 gzip
In dieser Reihenfolge, -n 1 bedeutet, dass pro gzip-Ausführung eine Datei übergeben wird, während -P 4 die gleichzeitige Aktivität von bis zu vier gzip-Prozessen ermöglicht.Auf diese Weise werden die CPU-Kerne besser ausgenutzt und die gesamte Komprimierungszeit deutlich reduziert.
Komplexere Skripte mit sh -c erstellen
xargs lässt sich auch sehr gut in Shells wie sh oder bash integrieren, um auszuführen komplexere Befehle für jedes Element in der ListeStellen Sie sich beispielsweise vor, Sie möchten alle Dateien verarbeiten. .txt Aus einem Verzeichnis wird dessen Name ausgegeben und darin nach einem bestimmten Muster gesucht. Die gesamte Ausgabe wird in einer Protokolldatei gespeichert.
Eine Möglichkeit wäre beispielsweise folgende:
find /ruta/a/los/archivos -type f -name "*.txt" | xargs -I {} sh -c 'echo "Procesando {}"; grep "patron" "{}"' >> salida.log
In dieser Konstruktion erzeugt die Funktion `find` die Liste der Dateien. xargs iteriert mit -I {} über jedes Argument und führt bei jeder Iteration ein kleines Skript aus. Skript in sh -cDieses Skript zeigt den Dateinamen an und verwendet grep, um darin nach dem entsprechenden Muster zu suchen. Alle Ausgaben werden in die Datei output.log umgeleitet. Es ist ein sehr anschauliches Beispiel für die Flexibilität, die xargs für die Verkettung verwandter Operationen bietet.
Dateien als Argumentquelle mit -a verwenden
Sobald Sie eine Liste von Routen oder Elementen in einer Textdatei gespeichert haben, ist es möglicherweise bequemer, xargs dies mitzuteilen. Lesen Sie direkt aus dieser Datei, anstatt eine Pipe zu verwenden.Genau dafür ist diese Option gedacht. -a:
xargs -a lista_de_archivos.txt rm
In diesem Fall öffnet xargs die Datei file_list.txt, interpretiert deren Inhalt als separate Einträge und wird diese Elemente als Argumente an den rm-Befehl übergeben., wobei auch die anderen Optionen, die Sie hinzufügen können (wie -n, -po -t), berücksichtigt werden.
Sicherheit, Leistung und Alternativen zu xargs
Die Arbeit mit xargs erfordert Folgendes zu beachten: die Sicherheitsimplikationen und Konsequenzen der Befehle, die Sie ausführen werdenBei der Automatisierung von Vorgängen mit großen Mengen an Dateien oder Daten kann ein kleiner Fehler in der Syntax mehr Schaden anrichten als nötig.
Wenn man beispielsweise xargs mit rm oder mv kombiniert, wird die häufige Verwendung dringend empfohlen. Mit den Optionen -po -t können Sie sehen, was vor der Massenausführung getan wird.Es empfiehlt sich außerdem, zunächst harmlose Befehle (wie echo oder ls) auszuprobieren, um zu überprüfen, ob die Argumentliste Ihren Erwartungen entspricht.
In puncto Leistung sticht xargs gerade deshalb hervor, weil effiziente Verarbeitung langer Eingaben, die die herkömmlichen Grenzen der Kommandozeile überschreiten könntenDurch die Aufteilung der Arbeit in überschaubare Blöcke vermeiden Sie Fehler wie „Argumentliste zu lang“, die auftreten, wenn Sie versuchen, Tausende von Argumenten gleichzeitig an einen einzigen Prozess zu übergeben.
Die Wahl -P Die parallele Ausführung von Aufträgen trägt zu einer besseren Maschinenleistung bei, obwohl Mehr Prozesse bedeuten nicht immer eine bessere Leistung.Es hängt stark davon ab, ob die Aufgabe CPU- oder E/A-lastig ist, von der Anzahl der verfügbaren Kerne und der Gesamtsystemlast. Es empfiehlt sich, Tests durchzuführen, um die optimale Anzahl gleichzeitiger Prozesse zu ermitteln.
Andererseits kann es in manchen komplexen Szenarien sinnvoll sein, … zu verwenden. mit der -exec-Aktion suchen statt xargs. Manchmal. find ... -exec comando {} \; o -exec ... + Es kann lesbarer und in sich geschlossener sein, da es keine externe Pipe benötigt. In anderen Kontexten bietet xargs mehr Flexibilität und ermöglicht eine bessere Wiederverwendung von Komponenten. Die Wahl hängt von der gewünschten Klarheit und dem Stil Ihrer Drehbücher ab..
Welchen Ansatz Sie auch wählen, der Schlüssel liegt darin Verstehen Sie, wie Argumente aufgebaut sind, wie mit Sonderzeichen umgegangen wird und welchen Sicherheitsspielraum Sie haben. vor dem Ausführen von Massenbefehlen, insbesondere wenn diese das Dateisystem oder kritische Daten betreffen.
Es braucht etwas Zeit, xargs zu beherrschen, aber sobald man die Logik des „Lesens von STDIN und Umwandelns in Argumente“ verinnerlicht hat, Es wird zu einem unverzichtbaren Werkzeug in Ihrem Kommandozeilenarsenal.Von kleinen Reinigungsaufgaben bis hin zu komplexen Verarbeitungs- und Suchskripten ermöglicht es Ihnen, in jeder Unix/Linux-Umgebung schneller, flexibler und effizienter zu arbeiten.
Leidenschaftlicher Autor über die Welt der Bytes und der Technologie im Allgemeinen. Ich liebe es, mein Wissen durch Schreiben zu teilen, und genau das werde ich in diesem Blog tun und Ihnen die interessantesten Dinge über Gadgets, Software, Hardware, technologische Trends und mehr zeigen. Mein Ziel ist es, Ihnen dabei zu helfen, sich auf einfache und unterhaltsame Weise in der digitalen Welt zurechtzufinden.
