Wie zählt man die Zeilenanzahl für einen bestimmten Dateityp in einer komprimierten TGZ-Datei?

Wie zählt man die Zeilenanzahl für einen bestimmten Dateityp in einer komprimierten TGZ-Datei?

Ich habe den folgenden Beitrag gesehen, der mir hilft, die Gesamtzahl der Zeilen in jeder .tgz-Datei zu ermitteln, aber ich möchte nur die Zeilenanzahl der .js-Dateien in diesen komprimierten .tgz-Ordnern zählen, nicht alles. Wie mache ich das?

https://stackoverflow.com/questions/22064932/count-number-of-lines-of-gz-files-recursviely-on-directory

Antwort1

Sie möchten alle Dateien extrahieren, die *.jsmit stdout übereinstimmen, und wc -lzum Zählen der Zeilen verwenden:

tar -x -f file.tgz -O --wildcards '*.js' | wc -l

-Ogibt an stdout aus, anstatt Dateien auf die Festplatte zu schreiben (wie es Tar normalerweise tut).

--wildcardsermöglicht Ihnen die Verwendung von Platzhaltern in den extrahierten Dateinamen (und dies ist wahrscheinlich nur GNU, obwohl dies unter Linux der Fall ist).

Dadurch wird eine einzelne Tar-Datei erstellt. Wenn Sie mehrere haben, können Sie dies in einer Schleife tun und die Ausgabe einer Schleife an weiterleiten wc -l.

Antwort2

Um die Zeilenanzahl jeder .jsDatei in einem komprimierten Tar-Archiv zu ermitteln, versuchen Sie Folgendes:

tar -xf file.tgz --to-command='echo " $TAR_FILENAME $(wc -l)"' --wildcards '*.js'

Beginnen wir zur Demonstration mit diesem Archiv:

$ tar --list -f file.tgz
a.js
dir1/
dir1/b.js
other.txt

Lassen Sie uns nun die Zeilenanzahl für jede JS-Datei im Archiv ermitteln:

$ tar -xf file.tgz --to-command='echo " $TAR_FILENAME $(wc -l)"' --wildcards '*.js' 
 a.js 10
 dir1/b.js 15

Verbesserung

Wenn wir eine schönere Formatierung der Ausgabe wünschen, können wir printfstattdessen Folgendes verwenden echo:

$ tar -xf file.tgz --to-command='printf "%-10s %s\n" "$TAR_FILENAME" "$(wc -l)"' --wildcards '*.js' 
a.js       10
dir1/b.js  15

Wie es funktioniert

  • -xweist Tar an, Dateien zu extrahieren.

  • -f file.tgzweist Tar an, aus zu extrahieren file.tgz.

  • --to-command='echo "$TAR_FILENAME $(wc -l)"'weist tar an, diesen Befehl auf jede extrahierte Datei anzuwenden. Tar stellt den Namen jeder Datei in der Umgebungsvariable bereit $TAR_FILENAME.

  • --wildcardsweist Tar an, die zu extrahierenden Dateien mithilfe eines Globs auszuwählen.

  • '*.js'gibt den zu extrahierenden Datei-Glob an.

verwandte Informationen