
Vi a postagem abaixo que me ajuda a obter o número total de linhas em cada arquivo .tgz, mas quero contar apenas o número de linhas de arquivos .js nessas pastas .tgz compactadas, não tudo. Como eu faço isso?
Responder1
Você deseja extrair todos os arquivos correspondentes *.js
ao stdout e usá-los wc -l
para contar as linhas:
tar -x -f file.tgz -O --wildcards '*.js' | wc -l
-O
envia para stdout em vez de gravar arquivos no disco (como o tar normalmente faz).
--wildcards
permite usar curingas nos nomes de arquivos extraídos (e provavelmente é apenas GNU, embora no Linux seja isso que você terá).
Isso criará um único arquivo tar. Se você tiver vários, poderá fazer isso em um loop e canalizar a saída de um loop para wc -l
.
Responder2
Para obter a contagem de linhas de cada .js
arquivo 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 melhor 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 defile.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 um glob.'*.js'
especifica o arquivo glob a ser extraído.