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


No Unix (Tru64), como faço o comando ls mostrar o tamanho do arquivo em megabytes? Atualmente, posso mostrar em bytes usando o seguinte:

ls -la


148


origem




Respostas:


Talvez -h é suficiente para você:

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

ls -lah

Recomendação geral: use man commandname ler o manual / ajuda de um determinado comando, e. Aqui man ls.


226



Obrigado, mas a opção -h parece não existir no Tru64 Unix.
Conselho geral: instale utilitários GNU ... - reinierpost
Eu gosto da sua dica sobre o uso do homem, mas realmente, 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
O Google é bom e tudo para sugestões gerais, mas, em última análise, as man pages são sistema / sistema operacional, até mesmo específicas do host, geralmente criadas quando o software é compilado ou instalado e, portanto, autoritativo para o software em seu sistema específico. - Nevin Williams
Apenas para completar o círculo, existe man online para o gnu / linux: linux.die.net/man - MariusMatutiae


ls --block-size=M imprime os tamanhos em megabytes, mas mostra 1 MB também para qualquer coisa abaixo de 1 MB. Não tenho certeza se essa opção é aceitável em sua versão para UNIX do ls, no entanto.

Na realidade ls -lh também imprime tamanhos em Gigabytes se o arquivo for grande o suficiente (Bem, de qualquer maneira: em Linux 64bit isso funciona:>)

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


32



Obrigado! Eu precisava monitorar as alterações do arquivo ao vivo em uma pasta e usar ls -h não faz sentido depois que um arquivo cresce mais de 1 GB, então eu uso este comando em um loop de 1 segundo: while true ; do ls -al --block-size=M ; sleep 1 ; done - ccpizza


experimentar ls -shR para formato legível humano recursivo.


14



OP declarou que não há -h no Tru64e fez isso mais de dois anos antes que essa resposta fosse publicada. - Michael Kjörling
Pensei que é minha responsabilidade ajudar aqueles que chegam aqui com a mesma pesquisa no google. - Sorter


Você terá que usar awk para fazer as contas por você:

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

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

Pode ser necessário ajustar o número do campo para corresponder à maneira como ls é colocado para fora. Você pode mudar mega para "1000000" se essa for sua preferência.

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


14



Muito menos elegante do que ls -lh ou ls --block-size=M, mas o AWK é muito útil! - Statwonk
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
Esta é uma boa solução para esses sistemas (AIX - estou olhando para você) que não tem a opção -h. - Buggabill


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


6





du -sm filename.txt


5



ele sempre arredonda o tamanho ... se o tamanho for menor do que 1 MB digamos 500K, então ele também imprimirá 1M - AnonGeek


Você também pode digitar

du -sh ./*

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


5





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

ls -sh nome (s) de arquivo (s)

-s é para tamanho e h é para Human Readable (como mencionado acima algumas vezes).

A saída ficará assim:

753M myfilename

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

Espero que isto ajude.


2



Esta questão é sobre o Tru64 Unix, e o OP declarou há quase cinco anos que o -h opção não existe em ls nesse sistema. - G-Man


ls -l --block-size=MB 

Para o --block-size parâmetro:

  • usar MB por 10 ^ 6
  • use apenas M para 2 ^ 20

0



Note que este não mostrará casas decimais. Além disso, qualquer coisa acima de 0 kB mas nem maior que 1 MB será mostrada como 1MB. Por esse motivo eu encontrei ls -l --block-size=kB para ser mais útil. - DaAwesomeP


Se você estiver interessado apenas no tamanho do arquivo e não precisar usar o ls comando, 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.


0



OP quer tamanho em MB, talvez uma opção stat produza tamanho em formato legível por humanos? - Archemar
Ah, isso foi idiota de mim. Obrigado por pegar isso. stat não tem uma opção para manipular o tamanho usando --printf ou qualquer outra opção até onde eu sei. Provavelmente, seria necessário usar uma combinação de utilitários de linha de comando printf e bc. Nesse caso, por que se incomodar? ls e cut / awk seriam mais rápidos. - SKN