Oooo Paulo, agora que me atentei de fato na sua resposta.
Eu acabei fazendo a mesma coisa de maneira mais feia. É minha correria...
Perdão, camarada!
:(
Em 12/09/2014 14:07, "Rodrigo Tenorio" <address@hidden
<mailto:address@hidden>> escreveu:
Testei aqui. Encontrei erro... arrumado ficaria assim.
Echo "scale=3;$(ls -l |grep arquivo.img | awk '{printf $5}{print
.1024.1024.1024}' | sed -e
's#0[.]#\/#g')" | bc
O awk sisma em colocar os .1024 como 0.1024...
Com o sed eu burlei isso, não é o mais bonito, mas funciona. Rs
Acho que deve existir opção mais limpa, mas to sem tempo pra pesquisar.
#Dividir por 1000 não deixa o calculo exato. Eu não faria isso se
precisasse de precisão no calculo.
Em 12/09/2014 13:44, "Rodrigo Tenorio" <address@hidden
<mailto:address@hidden>> escreveu:
Então teste: ls -l |grep arquivo.img | awk '{printf $5}{print
.1024.1024.1024}' | sed -e
"s#[.]#\/#g | bc
Em 12/09/2014 12:31, "Paulo Bettega address@hidden
<mailto:address@hidden>
[shell-script]" <address@hidden <mailto:address@hidden>>
escreveu:
Com a aritmética do shell não dá porque não trabalha com casas
decimais.
A solução do Rodrigo funciona, mas tem que tirar as divisões do awk
e mandar
pro bc senão a opção scale fica sem efeito. Ou então fazer tudo
dentro
do awk, mas não sei como.
echo "scale=3;$(ls -l etc.tgz|awk '{print $5/1024/1024/1024}')"| bc
.00294341
echo "scale=3;$(ls -l etc.tgz|awk '{print $5}')/1024/1024/1024"| bc
.002
Dividindo por 1000 ao invés de 1024, o resultado é mais próximo
do tamanho que o ls -l retorna. Deve ser o problema de potência de
10 ou de 2.
ls -l etc.tgz|awk '{print $5}'
3160461
bc <<<"scale=3;$(ls -l etc.tgz|awk '{print $5}')/1000/1000/1000"
.003
Abraços Paulo Bettega
On 12-09-2014 12:05, Rodrigo Tenorio address@hidden
<mailto:address@hidden> [shell-script] wrote:
> Acredito que para este cenário o ideal é você concatenar as
linhas dos comandos de
forma que montem
> a expressão e alimentar o bc.
> Acho que dá pra fazer "pipeando"...
> Algo como:
> ls -l |grep arquivo.img | awk '{print $5 / 1024 /1024/1024}' | bc
>
> Devo ter escrito alguma coisa errada no comando. Não estou com
condições de testar no
momento... mas
> veja se te ajuda...
>
> Em 12/09/2014 11:57, "Gustavo Filgueiras address@hidden
<mailto:address@hidden> <mailto:address@hidden
<mailto:address@hidden>>
> [shell-script]" <address@hidden
<mailto:address@hidden> <mailto:address@hidden
<mailto:address@hidden>>> escreveu:
>
> __
>
> Paulo,
>
> Obrigado pelas respostas, mas eu estou tentando fazer
sem usar variavel, eu
consegui chegar
> até essa linha
> echo $(( $(ls -l |grep arquivo.img | awk '{print $5}') /
1024 / 1024 / 1024 ))
>
> me retorna: 0
>
> acredito que se eu tivesse conseguindo ver 2 casas decimais,
retornaria: 0.09
>
>
> Em 12 de setembro de 2014 11:41, Paulo Bettega address@hidden
<mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>
[shell-script]
<address@hidden <mailto:address@hidden>
> <mailto:address@hidden
<mailto:address@hidden>>> escreveu:
>
> Ainda na pergunta anterior :) com expr, e no awk acho
que também dá.
> (desculpem se entendi errado a pergunta).
>
> $ ls -l etc.tgz|awk '{print $5}'
> 3160461
>
> $ ls -l etc.tgz|awk '{print $5*8}'
> 25283688
>
> $ expr $(ls -l etc.tgz|awk '{print $5}') \* 8
> 25283688
>
> Meu pensamento na tua dúvida desse email, ficou meio
feio mas
> acho que faz o trabalho.
>
> $ tamanho=$(ls -l etc.tgz|awk '{print $5}')
> $ [ "$tamanho" -lt 1000000000 ] && echo 0$(bc
<<<"scale=3;$tamanho/1000000000")GB
> 0.003GB
>
> Abraços Paulo Bettega
>
> On 12-09-2014 10:16, Gustavo Filgueiras address@hidden
<mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>
[shell-script] wrote:
> > Caros,
> >
> >
> > Muito obrigado por todas as respostas e soluções,
minha dúvida foi
solucionada.
> > Porém pesquisando mais, estou com outra dúvida.
> >
> > Gostaria de extrair o tamanho em GB, mas levando
em conta o arquivo de
100MB, se eu der um ls
> > -l --block-size=G |grep arquivo.img, vai me retornar
1GB.
> > ls -l --block-size=G |grep arquivo.img
> > -rw-r--r-- 1 root root 1G Sep 11 15:16
arquivo.img
> >
> > Mas gostaria que me retorna-se mais preciso, de
verdade ele deveria
retornar ( 0.09765625 )
> > mas se possivel cortar em 2 casas decimais. Procurei
algo, mas nada
funcionou bem, tentei usando
> > printf mas sem sucesso.
> >
> > 0.09 GB
> >
> > Em 12 de setembro de 2014 02:11, Fernando Mercês
address@hidden
<mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>
<mailto:address@hidden <mailto:address@hidden>
<mailto:address@hidden
<mailto:address@hidden>>>
> > [shell-script] <address@hidden
<mailto:address@hidden> <mailto:address@hidden
<mailto:address@hidden>>
> <mailto:address@hidden
<mailto:address@hidden> <mailto:address@hidden
<mailto:address@hidden>>>> escreveu:
> >
> > __
> >
> > Ok, última mensagem sobre... Mas acho que vale a
pena ver opções
diferentes pra mesma coisa:
> >
> > $ stat -c %s*8 mail.php | bc
> > 2272
> >
> > Agora sim, fui. o/
> >
> >
> >
> >
> > Att,
> >
> > Fernando Mercês
> > Linux Registered User #432779
> > www.mentebinaria.com.br
<http://www.mentebinaria.com.br>
<http://www.mentebinaria.com.br> <http://www.mentebinaria.com.br>
> > ------------------------------------
> > "Ninguém pode ser escravo de sua identidade;
quando surge uma
possibilidade de mudança é preciso
> > mudar". (Elliot Gould)
> >
> > 2014-09-12 2:01 GMT-03:00 Fernando Mercês
<address@hidden
<mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>
<mailto:address@hidden <mailto:address@hidden>
<mailto:address@hidden
<mailto:address@hidden>>>>:
> >
> > De novo, sei que já resolveu o problema, mas
se precisar de
desempenho pra isso (for fazer
> > com muitos arquivos), fiz uma
implementaçãozinha rápida em ANSI C,
assim você não depende do
> > bash, bc, nem mesmo do Linux. Imitei a saída
do wc. ;-)
> >
> > $ gcc -o bits bits.c
> >
> > $ ./bits mail.php .ssh/config .htcfg2
> > 2272 mail.php
> > 20376 .ssh/config
> > 14064 .htcfg2
> > 36712 total
> >
> > $ ./bits mail.php
> > 2272 mail.php
> >
> > Aí se for o caso você altera como quiser, pra
não imprimir o nome
do arquivo, ou não
> > imprimir o total.. Enfim, tu que sabe. :)
> > Mesmo que não use, já me diverti. Sem erro.
hehe
> >
> > Abraço!
> >
> >
> >
> > Att,
> >
> > Fernando Mercês
> > Linux Registered User #432779
> > www.mentebinaria.com.br
<http://www.mentebinaria.com.br>
<http://www.mentebinaria.com.br> <http://www.mentebinaria.com.br>
> > ------------------------------------
> > "Ninguém pode ser escravo de sua identidade;
quando surge uma
possibilidade de mudança é
> > preciso mudar". (Elliot Gould)
> >
> > 2014-09-12 1:09 GMT-03:00 Fernando Mercês
<address@hidden
<mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>
<mailto:address@hidden <mailto:address@hidden>
<mailto:address@hidden
<mailto:address@hidden>>>>:
> >
> > Opa, sei que já foi respondido, mas se
você já sabe o nome do
arquivo, por que usar ls |
> > grep? Eu faria direto, e talvez com o wc
ao invés do ls ;-)
> >
> > Com aritimética do bash:
> > $ echo $(($(wc -c < mail.php) * 8))
> > 2272
> >
> > Com aritimética do bc:
> > $ echo "$(wc -c < mail.php) * 8" | bc
> > 2272
> >
> > Abraço!
> >
> >
> >
> > Att,
> >
> > Fernando Mercês
> > Linux Registered User #432779
> > www.mentebinaria.com.br
<http://www.mentebinaria.com.br>
<http://www.mentebinaria.com.br> <http://www.mentebinaria.com.br>
> > ------------------------------------
> > "Ninguém pode ser escravo de sua
identidade; quando surge uma
possibilidade de mudança é
> > preciso mudar". (Elliot Gould)
> >
> > 2014-09-11 16:55 GMT-03:00 address@hidden
<mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>
<mailto:address@hidden <mailto:address@hidden>
> <mailto:address@hidden <mailto:address@hidden>>>
> > [shell-script] <address@hidden
<mailto:address@hidden>
> <mailto:address@hidden
<mailto:address@hidden>> <mailto:address@hidden
<mailto:address@hidden>
> <mailto:address@hidden
<mailto:address@hidden>>>>:
> >
> > __
> >
> > Claro que a conversao no caso foi base
2 mas pode ser
base=8 ou base=16 etc..
> > Abracp
> >
> >
> >
> >
> >
> >
>
>