Versuch, das Ergebnis von weitergeleiteten Befehlen zu caten

Versuch, das Ergebnis von weitergeleiteten Befehlen zu caten

Ich habe einen Ordner mit Dateien mit den Namen „list20140801.txt“ und „list20140802.txt“ …

Ich versuche dies zu tun

ls | sort | tail -3 | cat

Es werden mir jedoch nur die Dateinamen angezeigt, sie werden nicht mit „cat“ gekennzeichnet.

Antwort1

Laut catHandbuch besteht die Aufgabe einer Katze darin:

Verketten Sie DATEIEN oder die Standardeingabe mit der Standardausgabe.

Es gibt keinen Grund, warum man catdie Standardeingabe als Dateinamen behandeln sollte. Was man braucht, ist

ls | sortieren | Schwanz -3 | xargs Katze

stattdessen.

Weitere Informationen finden Sie auf xargsder Manpage:http://linux.about.com/library/cmd/blcmdl1_xargs.htm

Antwort2

Die Ausgabe lsist bereits standardmäßig auf die gleiche Weise sortiert wie sortdie Standardsortierung und sortwird daher nicht benötigt.

Die gängigste Methode, eine generierte Dateiliste an einen Befehl zu übergeben, ist die Verwendung von xargs. xargsWeitere Informationen finden Sie auf der Manpage, in diesem Fall benötigen Sie jedoch keine Optionen. ( xargsBei einer großen Anzahl von Dateien funktioniert dies möglicherweise nicht wie gewünscht, in den meisten Fällen funktioniert es jedoch problemlos, ohne dass Sie darüber nachdenken müssen.)

Die Version von , die tailheutzutage auf vielen Linux-Systemen verwendet wird, akzeptiert nicht nur -3als Option. Sie erfordert die Verwendung von -n3.

Schließlich cathat das Element am Ende Ihrer Pipeline keine sinnvolle Funktion und kann daher ebenfalls weggelassen werden.

Dieser Befehl sollte tun, was Sie wollen.

ls | xargs tail -n3

Aktualisieren

Ich habe gerade die Antwort von @AtomicHeartFather gelesen und festgestellt, dass ich möglicherweise tailden falschen Teil des Problems eingegeben habe. In diesem Fall wäre der Befehl

ls | tail -n3 | xargs cat

das ist so ziemlich das, was AtomicHeartFather geschrieben hat, abgesehen vom sort.

verwandte Informationen