Existe uma maneira de saber a porcentagem de imagens e códigos em um determinado diretório? [fechadas]

1

Digamos que você baixe algum arquivo .zip / tar.gz ou código-fonte de um projeto de algum lugar. O resultado que você obterá será um grupo aleatório de arquivos, alguns com código e alguns com imagens. Existe uma maneira de entender o percentual de imagens, arquivos de mídia e quanto é um arquivo de texto? Se houver uma ferramenta que faz isso, por favor, compartilhe. Se não, como alguém iria na elaboração de um script ou algo que faz isso?

Atualização - dando mais informações devido aos comentários recebidos.

Apenas para dar um exemplo, é disso que estou falando -

┌─[shirish@debian] - [~/games/I-Nex] - [10054]
└─[$] [$] ll -h

total 236K
drwxr-xr-x 3 shirish shirish 4.0K 2016-11-13 21:25 debian
drwxr-xr-x 3 shirish shirish 4.0K 2016-11-13 19:16 I-Nex
drwxr-xr-x 2 shirish shirish 4.0K 2016-11-13 19:16 JSON
drwxr-xr-x 3 shirish shirish 4.0K 2016-11-13 02:12 dists
-rw-r--r-- 1 shirish shirish 7.8K 2016-11-13 02:12 i2c_smbus.rules
-rw-r--r-- 1 shirish shirish 1.4K 2016-11-13 02:12 i-nex.mk
drwxr-xr-x 2 shirish shirish 4.0K 2016-11-13 02:12 manpages
drwxr-xr-x 2 shirish shirish 4.0K 2016-11-13 02:12 pixmaps
-rw-r--r-- 1 shirish shirish   97 2016-11-13 02:12 release.conf
-rw-r--r-- 1 shirish shirish  280 2016-11-13 02:12 requirements.md
-rwxr-xr-x 1 shirish shirish 1.4K 2016-11-13 02:12 changelog.awk
-rwxr-xr-x 1 shirish shirish 2.5K 2016-11-13 02:12 Makefile
-rw-r--r-- 1 shirish shirish 6.6K 2016-11-13 02:12 README.md
-rw-r--r-- 1 shirish shirish 176K 2016-11-13 02:12 Changelog.md

Agora, enquanto este exemplo é simples, pois apenas o diretório pixmaps tem as imagens / imagens, ele não informa quanto espaço está sendo consumido por arquivos de texto e diretórios de texto e quanto por pixmaps.

    
por shirish 27.01.2017 / 19:53

2 respostas

3
#!/bin/bash

find "$1" ! -type d |
while read fpath; do
    fname="${fpath##*/}"
    suffix="${fname##*.}"

    if [[ "$suffix" == "$fname" ]]; then
        suffix="(none)"
    fi

    size="$( stat --format '%s' "$fpath" )"

    printf '%s\t%d\n' "$suffix" "$size"
done |
awk '{ sz[$1] += $2 }
     END { for (s in sz) { printf("%s:\t%d\n", s, sz[s]) } }'

Dado um diretório na linha de comando, o script bash acima usará stat 1 para obter o tamanho de cada arquivo individual no diretório e, abaixo, em bytes. O while-loop também corta o sufixo de cada arquivo e gera-o juntamente com o tamanho do arquivo (em bytes).

O script awk 2 no final resumirá e imprimirá as informações.

Exemplo, executando em um diretório de um dos meus projetos de trabalho:

$ bash ./script.sh /home/kk/Work/Development/project/src/
c:      4559172
am:     369
h:      151369
o:      4613432
in:     42216
out:    3282712
(none): 2908962
Po:     18414
txt:    7129

A saída pode então ser filtrada e formatada, se necessário.

Modificar isso para fazer porcentagens do tamanho total ou usar file para obter o tipo de arquivo em vez de confiar no sufixo do nome do arquivo, ou enviar os tamanhos em outra unidade além dos bytes, é deixado para o leitor como no exercício.

1 A chamada stat aqui é feita sob medida para o GNU stat do pacote GNU coreutils. O stat no OpenBSD é totalmente diferente.

2 O script awk é assumido como sendo executado por uma implementação awk que sabe sobre matrizes associativas, como o GNU awk ou mawk .

    
por 27.01.2017 / 21:13
0

Se estiver em um arquivo compactado, como um arquivo .zip ou .tgz, você poderá comparar o tamanho compactado ao tamanho descompactado. Arquivos binários dentro do arquivo tendem a compactar muito menos, especialmente arquivos de imagem e mídia (eles já estão compactados). Arquivos de texto compactam muito mais (como mais de% 90).

Estou com muita fome para fazer as contas agora, mas se o seu arquivo for "muito" menor que o diretório em que ele é empilhado, você terá um arquivo com "muitos" arquivos de texto. Se você tem um arquivo "muito próximo" do tamanho do diretório em que ele é empacotado, você tem um arquivo "muito próximo" de todos os arquivos binários.

Espero que ajude

    
por 27.01.2017 / 21:30