
Vi la publicación a continuación que me ayuda a obtener la cantidad total de líneas en cada archivo .tgz, pero quiero contar solo la cantidad de líneas de archivos .js en estas carpetas .tgz comprimidas, no todo. ¿Cómo lo hago?
Respuesta1
Desea extraer todos los archivos que coincidan *.js
con la salida estándar y usarlos wc -l
para contar las líneas:
tar -x -f file.tgz -O --wildcards '*.js' | wc -l
-O
salidas a stdout en lugar de escribir archivos en el disco (como lo hace normalmente tar).
--wildcards
le permite usar comodines en los nombres de archivos que se extraen (y esto probablemente sea solo GNU, aunque en Linux esto es lo que tendrá).
Eso hará un solo archivo tar. Si tiene varios, puede hacerlo en un bucle y canalizar la salida de un bucle a wc -l
.
Respuesta2
Para obtener el recuento de líneas de cada .js
archivo en un archivo tar comprimido, intente:
tar -xf file.tgz --to-command='echo " $TAR_FILENAME $(wc -l)"' --wildcards '*.js'
A modo de demostración, comencemos con este archivo:
$ tar --list -f file.tgz
a.js
dir1/
dir1/b.js
other.txt
Ahora, obtengamos el recuento de líneas para cada archivo js en el archivo:
$ tar -xf file.tgz --to-command='echo " $TAR_FILENAME $(wc -l)"' --wildcards '*.js'
a.js 10
dir1/b.js 15
Mejora
Si queremos un mejor formato de la salida, podemos usar printf
en lugar de echo
:
$ tar -xf file.tgz --to-command='printf "%-10s %s\n" "$TAR_FILENAME" "$(wc -l)"' --wildcards '*.js'
a.js 10
dir1/b.js 15
Cómo funciona
-x
le dice a tar que extraiga archivos.-f file.tgz
le dice a tar que extraiga defile.tgz
.--to-command='echo "$TAR_FILENAME $(wc -l)"'
le dice a tar que aplique este comando a cada archivo extraído. Tar proporciona el nombre de cada archivo en la variable de entorno$TAR_FILENAME
.--wildcards
le dice a tar que elija los archivos para extraer usando un globo.'*.js'
especifica el archivo global que se va a extraer.