
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?
Antwort1
Sie möchten alle Dateien extrahieren, die *.js
mit stdout übereinstimmen, und wc -l
zum Zählen der Zeilen verwenden:
tar -x -f file.tgz -O --wildcards '*.js' | wc -l
-O
gibt an stdout aus, anstatt Dateien auf die Festplatte zu schreiben (wie es Tar normalerweise tut).
--wildcards
ermö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 .js
Datei 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 printf
stattdessen 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
-x
weist Tar an, Dateien zu extrahieren.-f file.tgz
weist Tar an, aus zu extrahierenfile.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
.--wildcards
weist Tar an, die zu extrahierenden Dateien mithilfe eines Globs auszuwählen.'*.js'
gibt den zu extrahierenden Datei-Glob an.