ls-command: como exibir o tamanho do arquivo em megabytes?

161

No Unix (Tru64), como faço para o lscomando mostrar o tamanho do arquivo em megabytes? Atualmente, eu posso mostrá-lo em bytes usando o seguinte:

ls -la
phuclv
fonte

Respostas:

247

Talvez -hseja suficiente para você:

-h
Quando usado com a opção -l, use os sufixos da unidade: Byte, Kilobyte, Megabyte, Gigabyte, Terabyte e Petabyte para reduzir o número de dígitos para três ou menos usando a base 2 para tamanhos.

ls -lah

Conselho geral: Use man commandnamepara ler o manual / ajuda de um determinado comando, por exemplo, aqui man ls.

Felix
fonte
1
Obrigado, mas a opção -h parece não existir no Tru64 Unix.
8
Conselho geral: instale utilitários GNU ...
reinierpost
22
Gosto da sua dica sobre o uso do man, mas, na verdade, pesquisar no Google é muito mais rápido do que usar o homem a maior parte do tempo (como agora, quando encontrei esse resultado no Google).
trusktr 20/03/2013
4
O Google é bom e tudo para dicas gerais, mas, em última análise, as páginas de manual são sistema / SO, mesmo host específico, geralmente criadas quando o software é compilado ou instalado e, portanto, autorizadas para o software em seu sistema específico.
Nevin Williams
1
Apenas para completar o círculo, há um homem on-line para o gnu / linux: linux.die.net/man
MariusMatutiae
32

ls --block-size=Mimprime os tamanhos em megabytes, mas mostra 1 MB também para itens abaixo de 1 MB. Não tenho certeza se esta opção é aceitável na sua versão UN do ls, no entanto.

Na verdade, ls -lhtambém imprime tamanhos em Gigabytes se o arquivo for grande o suficiente (de qualquer forma: no Linux de 64 bits, isso funciona:>)

Em um nó lateral: du -sh *imprime também tamanhos de diretório no diretório atual.

Jan.
fonte
Obrigado! I necessário para monitorar as alterações de arquivos ao vivo em uma pasta e usando ls -hnão tem sentido depois que um arquivo cresce mais de 1GB, então eu usar este comando em um 1 segundo loop:while true ; do ls -al --block-size=M ; sleep 1 ; done
ccpizza
15

Você precisará awkfazer as contas para você:

ls -l | awk 'BEGIN{mega=1048576} $5 >= mega {$5 = $5/mega "MB"} {print}'

Isso não afetará a saída para arquivos menores que mega.

Pode ser necessário ajustar o número do campo para coincidir com o lslayout. Você pode alterar megapara "1000000" se essa for sua preferência.

Isso imprimirá mais casas decimais do que você provavelmente deseja. Você pode implementar uma função de arredondamento.

Dennis Williamson
fonte
3
Muito menos elegante que ls -lhou ls --block-size=M, mas o AWK é muito útil!
precisa saber é o seguinte
Apenas o que eu precisava. Todas as outras soluções são arredondadas para o MB mais próximo, mas isso mostra algumas casas decimais e é facilmente personalizável.
Zeroimpl 17/10
3
Esta é uma boa solução para os sistemas (AIX - estou olhando para você) que não possuem a opção -h.
Buggabill
14

tente um ls -shRformato legível humano recursivo.

Classificador
fonte
4
O OP declarou que não existe -hno Tru64 e o fez mais de dois anos antes de esta resposta ser publicada.
um CVn 11/10
3
Pensei que é minha responsabilidade ajudar aqueles que chegam aqui com a mesma pesquisa no Google.
Classificador
8

tente ls -lash, imprime tamanhos em formato legível por humanos

n0pe
fonte
5

du -sm filename.txt

Éter
fonte
1
ele sempre arredondar para cima o tamanho ... se tamanho é inferior a 1 MB dizer 500K, em seguida, também ele irá imprimir 1M
AnonGeek
5

Você também pode digitar

du -sh ./*

Isso listará todas as pastas no diretório atual, com formato legível por humanos, incluindo os tamanhos de arquivo mais familiares em Kb, Mb, Gb.

Keng
fonte
2

Se você deseja apenas o tamanho de apenas um arquivo específico, o comando, uma extrapolação trivial das respostas anteriores, é:

ls -sh nome (s) do arquivo

-sé para tamanho e hé para legível por humanos (como mencionado acima algumas vezes).

A saída terá a seguinte aparência:

753M myfilename

Se você deixar de fora o (s) nome (s) do (s) nome (s) do arquivo, ele listará o diretório, colocando o tamanho de cada arquivo ao lado do nome - não muito diferente do que ls -laocorre quando chamado sem argumentos de nome de arquivo.

Espero que isto ajude.

Rob Jones
fonte
2
Esta pergunta é sobre o Tru64 Unix e o OP afirmou há quase cinco anos que a -hopção não existe lsnesse sistema.
G-Man
2
ls -l --block-size=MB 

Para o --block-sizeparâmetro:

  • use MBpara 10 ^ 6
  • use apenas Mpara 2 ^ 20
Evan
fonte
Observe que isso não mostrará casas decimais . Além disso, qualquer coisa acima de 0 kB, mas não superior a 1 MB, será mostrada como1MB . Por esse motivo, achei ls -l --block-size=kBmais útil.
DaAwesomeP
0

Se você está apenas interessado no tamanho do arquivo e não precisa usar o lscomando, tente o seguinte:

# echo "Hello World" > file.txt
# ls -l file.txt 
-rw-r--r-- 1 user user 12 Mar 10 11:32 file.txt
# stat --printf='%s\n' file.txt
12

Isso imprimirá o tamanho do arquivo sem a necessidade de analisar nada.

SKN
fonte
OP quer tamanho em MB, talvez uma opção stat produza tamanho em formato legível por humanos?
Archemar 12/03
Ah, isso foi burro da minha parte. Obrigado por capturar isso. O stat não tem uma opção para manipular o tamanho usando --printf ou qualquer outra opção, até onde eu saiba. Provavelmente seria necessário o uso de uma combinação de utilitários de linha de comando printf e bc. Nesse caso, por que se preocupar. sl e awk seriam mais rápidos.
SKN 23/04