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 cat
Handbuch besteht die Aufgabe einer Katze darin:
Verketten Sie DATEIEN oder die Standardeingabe mit der Standardausgabe.
Es gibt keinen Grund, warum man cat
die Standardeingabe als Dateinamen behandeln sollte. Was man braucht, ist
ls | sortieren | Schwanz -3 | xargs Katze
stattdessen.
Weitere Informationen finden Sie auf xargs
der Manpage:http://linux.about.com/library/cmd/blcmdl1_xargs.htm
Antwort2
Die Ausgabe ls
ist bereits standardmäßig auf die gleiche Weise sortiert wie sort
die Standardsortierung und sort
wird daher nicht benötigt.
Die gängigste Methode, eine generierte Dateiliste an einen Befehl zu übergeben, ist die Verwendung von xargs
. xargs
Weitere Informationen finden Sie auf der Manpage, in diesem Fall benötigen Sie jedoch keine Optionen. ( xargs
Bei 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 tail
heutzutage auf vielen Linux-Systemen verwendet wird, akzeptiert nicht nur -3
als Option. Sie erfordert die Verwendung von -n3
.
Schließlich cat
hat 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 tail
den 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
.