¿Cómo contar el número de líneas para un tipo de archivo específico en un archivo comprimido tgz?

¿Cómo contar el número de líneas para un tipo de archivo específico en un archivo comprimido tgz?

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?

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

Respuesta1

Desea extraer todos los archivos que coincidan *.jscon la salida estándar y usarlos wc -lpara contar las líneas:

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

-Osalidas a stdout en lugar de escribir archivos en el disco (como lo hace normalmente tar).

--wildcardsle 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 .jsarchivo 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 printfen 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

  • -xle dice a tar que extraiga archivos.

  • -f file.tgzle dice a tar que extraiga de file.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.

  • --wildcardsle dice a tar que elija los archivos para extraer usando un globo.

  • '*.js'especifica el archivo global que se va a extraer.

información relacionada