Eu sei que posso usar ls -latpara descobrir quantos bytes tem um arquivo e multiplicar por 8 para descobrir quantos bits. Mas isso é possível em apenas uma linha de comando?
Eu sei que posso usar ls -latpara descobrir quantos bytes tem um arquivo e multiplicar por 8 para descobrir quantos bits. Mas isso é possível em apenas uma linha de comando?
Respostas:
Com o GNU du:
du -b FILE | awk '{ print $1, "* 8" }' | bc
bc- awkpode fazer a matemática em si:du -b FILE | awk '{print $1 * 8}
wc -c < FILEpara um equivalente portátil (para arquivos não-regulares, que tem o efeito colateral de lê-las, embora)
Uma solução shell + GNU coreutils:
echo $(( 8 * $(stat -c%s FILE) ))
A -c%sopção de statretornar apenas o tamanho do arquivo em bytes, eliminando a necessidade de processamento de texto adicional. Essa 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 zsh / stat opcional, será necessário especificar um caminho para obter os coreutils do GNU:
echo $(( 8 * $(command stat -c%s FILE) ))
Com o GNU find(antecede o GNU há statdécadas):
find file -prune -printf '%s*8\n' | bc
Relativamente portável:
ls -ld -- "$file" | awk '{print $5*8;exit}'
É possível em uma linha, porque você pode colocar vários comandos em uma linha, por exemplo, conectados por tubos ou substituições de comandos:
echo $(stat -c %s FILE) '* 8' | bc
(Obrigado @frostschutz pela atualização).
ZSize: 5por exemplo
stat -c %s FILEimprimir tamanho diretamente, em vez de sed?
Único arquivo:
wc -c yourfile | awk '{print $1*8}'
Arquivos múltiplos:
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.
a barquivo como a b(seqüências de espaços em branco convertidos em um único espaço, espaços em branco removidos).
NR == 1