grep
ist das falsche Werkzeug dafür, zum Teil weil es nur Zeilen aus den Dateien ausgibt, die dem von Ihnen gegebenen Muster entsprechen (und vermutlich Sie möchten alle Zeilen), und zum Teil, weil Sie kein Muster angegeben haben, also den ersten Dateinamen als das Muster (was nicht hilfreich ist).
Das Auflisten aller *.js
Dateien ist einfach genug:
find . -name '*.js'
Und die Verkettung zu einer Datei ist ebenfalls einfach:
find . -name '*.js' | xargs cat
Es ist jedoch schwieriger, sie nach der lexikalischen Reihenfolge des Dateinamens zu sortieren und das Verzeichnis, in dem sie sich befinden, zu ignorieren.
Einfach sort
nicht erledigt den Job, und es gibt keine --key
Option, die das letzte Feld auswählen wird, wenn die Anzahl der Felder unbekannt ist.
Der folgende Befehl verwendet sed, um den Dateinamen an den Anfang der Zeile zu verschieben, sortiert diesen und entfernt ihn dann wieder.
find . -name '*.js' | sed 's:^.*/\([^/]*\)$:\1 \0:' | sort | cut -d' ' -f2-
Dies funktioniert nicht richtig, wenn einer Ihrer Datei- oder Verzeichnisnamen Leerzeichen enthält.
Sie können den Inhalt dann extrahieren, indem Sie Folgendes hinzufügen cat
:
find . -name '*.js' \ | sed 's:^.*/\([^/]*\)$:\1 \0:' | sort | cut -d' ' -f2- \ | xargs cat