Como se descobre quantos bits um arquivo possui em um comando?

6

Eu sei que posso usar ls -lat para descobrir quantos bytes tem um arquivo e depois multiplicar por 8 para descobrir quantos bits. Mas isso é possível em apenas uma linha de comando?

    
por Felipe 26.01.2014 / 23:48

5 respostas

13

Com o GNU du :

du -b FILE | awk '{ print $1, "* 8" }' | bc
    
por 26.01.2014 / 23:59
5

Uma solução shell + GNU coreutils:

echo $(( 8 * $(stat -c%s FILE) ))

A opção -c%s para stat retorna apenas o tamanho do arquivo em bytes, eliminando qualquer necessidade de processamento de texto adicional. Esta sintaxe é suportada pelo GNU coreutils e, portanto, deve funcionar na maioria das distribuições Linux.

Como uma exceção no Linux, se alguém estiver executando o zsh com o módulo opcional zsh / stat, será necessário especificar um caminho para obter os utilitários do GNU:

echo $(( 8 * $(command stat -c%s FILE) ))
    
por 27.01.2014 / 00:00
3

É possível em uma linha, porque você pode colocar vários comandos em uma linha, por exemplo, conectado por pipes ou substituições de comandos:

echo $(stat -c %s FILE) '* 8' | bc

(Obrigado @frostschutz pela atualização).

    
por 26.01.2014 / 23:56
2

Com o GNU find (precede o GNU stat em décadas):

find file -prune -printf '%s*8\n' | bc

Relativamente portável:

ls -ld -- "$file" | awk '{print $5*8;exit}'
    
por 27.01.2014 / 11:47
2

Arquivo único:

wc -c yourfile | awk '{print $1*8}'

Arquivos mutiple:

wc -c yourfile1 yourfile2 | awk '{$1*=8; print $0}'

Este também funciona para um único arquivo. Não é completamente à prova de balas, veja o comentário de Stephane.

Estes são comandos compatíveis com o padrão POSIX.

    
por 27.01.2014 / 00:54