Eine Linux-Terminal-Eingabeaufforderung auf einem Laptop

Fatmawati Achmad Zaenuri/Shutterstock

Müssen Sie einige Linux-Befehle aneinanderreihen, aber einer von ihnen akzeptiert keine Pipe-Eingabe? |_+_| kann die Ausgabe von einem Befehl nehmen und als Parameter an einen anderen Befehl senden.



Alle Standard-Linux-Dienstprogramme haben drei Datenströme mit ihnen verbunden. Dies sind der Standardeingabestrom (stdin), der Standardausgabestrom (stdout) und der Standardfehlerstrom (stderr).

Diese Streams arbeiten mit Text. Wir senden eine Eingabe (stdin) an einen Befehl mit Text, und die Antwort (stdout) wird als Text in das Terminalfenster geschrieben. Fehlermeldungen werden auch als Text (stderr) in das Terminalfenster geschrieben.

Spiel in den Fenstermodus zwingen

Eine der großartigen Funktionen von Linux und Unix-ähnliche Betriebssysteme ist die Möglichkeit, die stdout-Ausgabe eines Befehls in die stdin-Eingabe eines zweiten Befehls zu leiten. Dem ersten Befehl ist es egal, dass seine Ausgabe nicht an ein Terminalfenster geht, und dem zweiten Befehl ist es egal, dass seine Eingabe nicht von einer Tastatur kommt.

Obwohl alle Linux-Befehle die drei Standardstreams haben, akzeptieren nicht alle die stdout eines anderen Befehls als Eingabe für ihre stdin. Das bedeutet, dass Sie keine Eingaben an sie weiterleiten können.

Anzeige

|_+_| ist ein Befehl zum Erstellen von Ausführungspipelines unter Verwendung der Standarddatenströme. Mit |_+_| wir können Befehle wie |_+_|, |_+_| und |_+_| . machen akzeptieren Standardeingaben als Argumente.

Der xargs-Befehl

|_+_| akzeptiert über Pipe geleitete Eingaben. Es kann auch Eingaben aus einer Datei akzeptieren. |_+_| verwendet diese Eingabe als Parameter für die Befehle, mit denen sie arbeiten soll. Wenn wir |_+_| . nicht sagen um mit einem bestimmten Befehl zu arbeiten, wird standardmäßig |_+_| verwendet.

Damit können wir demonstrieren, wie |_+_| erzeugt immer eine einzelne Ausgabezeile, selbst bei einer mehrzeiligen Eingabe.

Wenn wir die |_+_| . verwenden (eine Datei pro Zeile auflisten) Option mit |_+_| erhalten wir a einzelne Spalte mit Dateinamen .

xargs

Dies listet die Shell-Skriptdateien im aktuellen Verzeichnis auf.

Wir erhalten wie erwartet eine einzelne Spalte. Wenn wir es durch |_+_| . leiten was bekommen wir?

xargs

Anzeige

Die Ausgabe wird als ein langer Textstrom in das Terminalfenster geschrieben.

Es ist diese Fähigkeit, die uns |_+_| Parameter in andere Befehle einspeisen.

Verwenden von xargs mit wc

Wir können |_+_| . verwenden leicht haben |_+_| zähle die Wörter, Zeichen und Zeilen in mehreren Dateien.

wie man alte macos herunterlädt
xargs

Das ist, was passiert:

  • |_+_| listet die *.page-Dateien auf und übergibt die Liste an |_+_|.
  • |_+_| übergibt die Dateinamen an |_+_|.
  • |_+_| behandelt die Dateinamen so, als hätte sie sie als Kommandozeilenparameter erhalten.

Die Statistiken für jede Datei werden zusammen mit einer Gesamtsumme angezeigt.

Verwenden von xargs mit Bestätigung

Wir können die |_+_| . verwenden (interaktive) Option für |_+_| bitten Sie uns um eine Bestätigung, dass wir damit einverstanden sind, fortzufahren.

Wenn wir eine Zeichenfolge von Dateinamen an |_+_| übergeben, über |_+_|, |_+_| Wille erstelle die Dateien für uns.

echo

Anzeige

Der auszuführende Befehl wird angezeigt und |_+_| wartet auf unsere Antwort, indem wir y oder Y oder n oder N eingeben und die Eingabetaste drücken.

Wenn Sie nur die Eingabetaste drücken, wird es als n behandelt. Der Befehl wird nur ausgeführt, wenn Sie y oder Y eingeben.

Wir haben y und Enter gedrückt. Wir können |_+_| . verwenden um zu überprüfen, ob die Dateien erstellt wurden.

rm

Verwenden von xargs mit mehreren Befehlen

Wir können mehrere Befehle mit |_+_| . verwenden mit dem |_+_| (Anfangsargumente) Option.

Diese Option definiert eine Ersetzungszeichenfolge. Wo immer das Token für die Ersetzungszeichenfolge in der Befehlszeile erscheint, die Werte, die an |_+_| . geliefert wurden eingefügt werden.

Verwenden wir das |_+_| Befehl, um die Unterverzeichnisse des aktuellen Verzeichnisses anzuzeigen. Die |_+_| (Verzeichnis) Option verursacht |_+_| um Dateien zu ignorieren und nur über Verzeichnisse zu berichten.

mkdir

Es gibt ein einzelnes Unterverzeichnis namens images.

Anzeige

In einer Datei namens directory.txt haben wir die Namen einiger Verzeichnisse, die wir erstellen möchten. Wir können uns seinen Inhalt mit |_+_| ansehen.

xargs

Wir verwenden dies als Eingabedaten für |_+_|. Der Befehl, den wir ausführen werden, lautet:

xargs

Das gliedert sich wie folgt auf:

wie man ein gif verwendet
  • cat-Verzeichnisse.txt | : Dies schiebt den Inhalt der Dateidirectrories.txt (alle neuen Verzeichnisnamen) in |_+_|.
  • xargs -I % : Dies definiert einen Ersetzungsstring mit dem Token %.
  • sch-c : Dies startet eine neue Subshell. Die |_+_| (Befehl) weist die Shell an, Befehle von der Befehlszeile zu lesen.
  • „Echo %; mkdir %’ : Jedes der %-Token wird durch die Verzeichnisnamen ersetzt, die von |_+_| übergeben werden. Die |_+_| Befehl gibt den Verzeichnisnamen aus; die |_+_| Befehl erstellt das Verzeichnis.

Die Verzeichnisse werden nacheinander aufgelistet.

Wir können |_+_| . verwenden noch einmal, um zu überprüfen, ob die Verzeichnisse erstellt wurden.

xargs

Kopieren von Dateien an mehrere Speicherorte

Wir können |_+_| . verwenden um es uns zu ermöglichen, Dateien mit einem einzigen Befehl an mehrere Speicherorte zu kopieren.

Wir werden die Namen von zwei Verzeichnissen in |_+_| . leiten als Eingabeparameter. Wir sagen |_+_| um jeweils nur einen dieser Parameter an den Befehl zu übergeben, mit dem es arbeitet.

In diesem Fall lautet der Befehl |_+_|. Der Effekt ist also, |_+_| . aufzurufen zweimal, jeweils mit einem der beiden Verzeichnisse als Kommandozeilenparameter. Die |_+_| Parameter, der dies ermöglicht, ist der |_+_| (maximale Anzahl) Option. Wir werden dies als eins festlegen.

Anzeige

Wir verwenden auch die |_+_| (ausführliche) Option mit |_+_| damit es meldet, was passiert.

echo

Die Dateien werden nacheinander in die beiden Verzeichnisse kopiert. |_+_| meldet jede Dateikopieraktion, damit wir sehen können, wie sie ausgeführt wird.

Ich kann mich nicht an mein Gmail-Passwort erinnern

Löschen von Dateien in verschachtelten Verzeichnissen

Wenn Dateinamen Leerzeichen und seltsame Zeichen enthalten – wie z. B. Zeilenumbruchzeichen – |_+_| werden sie nicht richtig interpretieren können. Wir können dieses Problem lösen, indem wir die Option -0 (null terminator) verwenden. Dies sagt |_+_| um das Nullzeichen als letztes Trennzeichen für Dateinamen zu verwenden.

Wir verwenden |_+_| in diesem Beispiel. |_+_| hat eine eigene Option für Umgang mit Leerzeichen und seltsame Zeichen in Dateinamen. Es ist die |_+_| (vollständiger Name, Nullzeichen) Option.

xargs

Das gliedert sich wie folgt auf:

  • finden . -name *.png : |_+_| wird im aktuellen Verzeichnis suchen. für Objekte mit Namen, die mit *.png übereinstimmen, die Dateien sind (|_+_|).
  • -print0 : Namen werden mit einem Nullzeichen abgeschlossen und Leerzeichen und seltsame Zeichen werden berücksichtigt.
  • xargs -0 : xargs wird auch davon ausgehen, dass Dateinamen nullterminiert sind, und Leerzeichen und seltsame Zeichen werden keine Probleme verursachen.
  • rm -v -rf {} : rm wird ausführlich sein und berichten, was passiert (|_+_|). Es wird rekursiv (-r) sein und verschachtelte Unterverzeichnisse durchsuchen und Dateien ohne Aufforderung entfernen (|_+_|). Das {} wird durch jeden Dateinamen ersetzt.

Alle Unterverzeichnisse werden durchsucht und die Dateien, die dem Suchmuster entsprechen, werden gelöscht.

Verschachtelte Verzeichnisse entfernen

Nehmen wir an, wir möchten eine Reihe von verschachtelten Unterverzeichnissen entfernen. |_+_| werden wir sie sehen lassen.

-1

lsAnzeige

Dieser Befehl verwendet find, um rekursiv im aktuellen Verzeichnis zu suchen. Das Suchziel ist ein Verzeichnis namens level_one. Die Verzeichnisnamen werden über |_+_| . übergeben zu |_+_|.

Die einzigen wesentlichen Änderungen zwischen diesem Befehl und dem vorherigen Befehl sind, dass der Suchbegriff der Name des obersten Verzeichnisses ist und |_+_| sagt |_+_| nach Verzeichnissen zu suchen, nicht nach Dateien.

Der Name jedes Verzeichnisses wird gedruckt, wenn es entfernt wird. Wir können mit |_+_| . überprüfen :

xargs

Was ist die Aktualisierung der Netzbetreibereinstellungen?

Alle verschachtelten Unterverzeichnisse werden gelöscht.

Löschen aller Dateien mit Ausnahme eines Dateityps

Wir können |_+_|, |_+_| . verwenden und |_+_| um alle Dateien außer einem Typ zu löschen, den wir behalten möchten. Es ist etwas kontraintuitiv, aber wir geben den Namen des Dateityps an, den wir möchten behalten , nicht der Name derjenigen, die wir löschen möchten.

Die |_+_| Option sagt |_+_| um die Namen der Dateien zurückzugeben, die nicht dem Suchmuster entsprechen. Wir verwenden die |_+_| (Anfangsargumente) Option mit |_+_| einmal mehr. Dieses Mal ist das Token zum Ersetzen von Zeichenfolgen, das wir definieren, {}. Dies verhält sich genau so wie das zuvor generierte Token zum Ersetzen der Zeichenfolge, das zufällig ein % war.

xargs

Wir können mit |_+_| überprüfen. Die einzigen Dateien, die im Verzeichnis verbleiben, sind diejenigen, die dem Suchmuster *.sh entsprechen.

xargs

Erstellen einer Archivdatei mit Xargs

Wir können |_+_| . verwenden um nach Dateien zu suchen und sie durch |_+_| . weiterzuleiten bis |_+_|, um eine Archivdatei zu erstellen.

Anzeige

Wir suchen im aktuellen Verzeichnis. Das Suchmuster ist *.page, also suchen wir nach .page-Dateien.

wc

Die Dateien werden wie erwartet aufgelistet, während die Archivdatei erstellt wird.

Der Datenvermittler

Manchmal braucht man beim Stapeln ein kleines Gerüst. |_+_| schließt die Lücke zwischen Befehlen, die Informationen ausgeben können, und Befehlen, die nicht dafür ausgelegt sind, sie aufzunehmen.

Beide |_+_| und |_+_| haben eine Vielzahl von Möglichkeiten. Sie werden ermutigt, ihre Manpages zu lesen, um mehr zu erfahren.

Linux-Befehle
Dateien Teer · pv · Katze · tac · chmod · Griff · unterschied · sed · Mit · Mann · geschoben · popd · fsck · Testdisk · seq · fd · pandoc · CD · $PFAD · awk · beitreten · jq · falten · einzigartig · Journalctl · Schwanz · Zustand · ls · fstab · rauswerfen · weniger · chgrp · chown · rev · suchen · Saiten · Typ · umbenennen · Postleitzahl · entpacken · montieren · ummount · Installieren · fdisk · mkfs · rm · rmdir · rsync · df · gpg · wir · Nano · mkdir · von · ln · Patch · Konvertieren · rclon · Fetzen · SRM
Prozesse alias · Bildschirm · oben · nett · renice · Fortschritt · strace · System · tmux · chsh · Geschichte · beim · Charge · kostenlos · die · dmesg · Benutzermod · ps · chroot · xargs · tty · kleiner Finger · lsof · vmstat · Auszeit · Mauer · ja · töten · Schlaf · sudo · seine · Zeit · groupadd · Benutzermod · Gruppen · lshw · stilllegen · neu starten · halt · ausschalten · passwd · lscpu · crontab · Datum · bg · fg
Vernetzung netstat · Klingeln · Traceroute · ip · ss · Wer ist · fail2ban · bmon · Sie · Finger · nmap · ftp · Locken · wget · Wer · Wer bin ich · In · iptables · ssh-keygen · ufw

VERBUNDEN: Beste Linux-Laptops für Entwickler und Enthusiasten

WEITER LESEN