Com o GNU du
:
du -b FILE | awk '{ print $1, "* 8" }' | bc
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?
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) ))
É 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).
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}'
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.