Como contar o número de linhas para um tipo de arquivo específico em um arquivo compactado tgz?

2

Eu vi abaixo post que me ajuda a obter o número total de linhas em cada arquivo .tgz, mas eu quero contar apenas o número de linhas de arquivos .js neste comprimido .tgz pastas nem tudo. Como faço isso?

link

    
por Innocent 26.09.2016 / 00:37

2 respostas

1

Você deseja extrair todos os arquivos correspondentes a *.js para stdout e usar wc -l para contar as linhas:

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

-O sai para stdout em vez de gravar arquivos em disco (como o tar normalmente faz).

--wildcards permite que você use curingas nos nomes de arquivos que são extraídos (e isso é provável apenas no GNU, embora no Linux seja isso o que você terá).

Isso fará um único arquivo tar. Se você tiver múltiplos, você pode fazê-lo em um loop e canalizar a saída de um loop para wc -l .

    
por 26.09.2016 / 00:46
1

Para obter a contagem de linha de cada arquivo .js em um arquivo tar compactado, tente:

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

Como demonstração, vamos começar com este arquivo:

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

Agora, vamos obter a contagem de linhas para cada arquivo js no arquivo:

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

Melhoria

Se quisermos uma formatação mais agradável da saída, podemos usar printf em vez 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

Como funciona

  • -x diz ao tar para extrair arquivos.

  • -f file.tgz diz ao tar para extrair de file.tgz .

  • --to-command='echo "$TAR_FILENAME $(wc -l)"' diz ao tar para aplicar este comando a cada arquivo extraído. Tar fornece o nome de cada arquivo na variável de ambiente $TAR_FILENAME .

  • --wildcards diz ao tar para escolher os arquivos a serem extraídos usando glob.

  • '*.js' especifica o arquivo glob para extrair.

por 26.09.2016 / 00:50