Como eu calculo o tamanho do arquivo ignorando PDFs (ou outros arquivos binários)?

1

Eu gostaria de calcular o tamanho do arquivo de uma árvore de diretórios, mas também quero ignorar todos os PDFs e imagens. Essencialmente, estou tentando descobrir qual é o tamanho dos arquivos somente de texto.

Como posso fazer isso?

Nota: isso é em um ambiente Linux, RedHat em particular

    
por cdeszaq 29.10.2012 / 15:34

1 resposta

0

Considere uma estrutura de diretórios da seguinte forma:

$ ls -sR1
.:
total 32
4 1/
4 2/
4 m
4 n
4 o
4 x.pdf
4 y.pdf
4 z.pdf

./1:
total 0

./2:
total 8
4 a/
4 p

./2/a:
total 4
4 q

Em seguida, para obter uma lista de todos os arquivos que não correspondem a *.pdf , podemos fazer

$ find . -type f \( ! -name '*.pdf' \)

cuja expansão também não corresponde, por exemplo, *.jpg é bastante óbvia. Em seguida, use du da seguinte forma:

$ du -c $(find . -type f \( ! -name '*.pdf' \))
4   ./o
4   ./m
4   ./n
4   ./2/a/q
4   ./2/p
20  total

onde você pode querer lançar um -b para obter o tamanho aparente em bytes, em vez do uso do disco. -c dá o total geral.

As limitações desta abordagem são:

  1. Não funcionará se a sua árvore de diretórios for muito grande, porque
    • Porque ele verifica a árvore duas vezes ( find + du )
    • Porque ele alimenta a saída de find em du por meio da linha de comando e, portanto, é limitado pelo tamanho máximo permitido para isso.
  2. Irá (nessa abordagem ingênua) corresponder apenas aos arquivos com base em seus nomes, não no conteúdo deles.

Você pode superar 1. usando find para executar du em cada arquivo individual e, em seguida, usar awk ou algo semelhante para adicioná-lo. 2. pode ser resolvido com verificações mais intrigantes em find , possivelmente com base na saída de file para cada arquivo e comparando-o com uma lista positiva ou negativa.

    
por 29.10.2012 / 16:15