conferir tamanho de arquivo [RESOLVIDO]

1. conferir tamanho de arquivo [RESOLVIDO]

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 10/06/2008 - 18:30h

ai gente boa desse forum eu estou presissando de um comando shell que confira se um arquivo existe, caso esse arquivo exista confira o tamanho dele com um tamanho pre deteterminado por min e se o arquivo naum tiver o tamanho certo acionar o wget pra terminar ou baixar denovo

por favor tem como fazer isso em shell script ??

desde ja agradeço a ajuda


  


2. MELHOR RESPOSTA

Elgio Schlemer
elgio

(usa OpenSuSE)

Enviado em 16/06/2008 - 14:34h

O Lincoln!

me permite criticar o teu script? Acho que pude melhora-lo pra ti. Primeiro, deixe-me comentar o que vi de errado no intuito que te aprofundes mais em shell script, OK?

#!/bin/sh

Eu usaria /bin/bash. sh pode dar problemas.


tmax=110; #tamanho em bytes

#grava o tamanho num arquivo
tarqu="`du /home/lincoln/teste/1.jpg > tam`";

tam="`cut -c 1-3 tam`"; #obtem tamanho do arquivo

As etapas acima podem ser feitas direto na memória, sem envolver arquivo. Ainda, está equivocado! O du, por padrão, retorna o tamanho em blocos de 512!!! Um arquivo de 600 bytes vai retornar 1 para o du acima!! Um de 2000 bytes vai retornar 3 (porquq 4 seriam 2048 bytes).

É possível alterar o du para retornar em BYTES com o comando du -b

O teu cut também te afundará, pois ele está pegando apenas as colunas 1 a 3. E se o arquivo for maior que 999 bytes??

Outro problema é que se o arquivo NAO EXISTIR, o du ira gerar erro na saida de erro e nao na saida padrao. Como efeito tu teras NADA para a variavel tam o que ira gerar ERRO DE SINTAXE no teu if abaixo.

if [ $tam -gt $tmax ];
then
echo "O arquivo é maior que 110 b " ;
else
echo "O arquivo é menor que 110 b " ;
fi


Enfim, fiz este pra ti. Para poder testar, fiz com que o nome do arquivo pudesse ser parametro:

./contador /home/lixo.txt

Usei o stat ao inves do du, porque assim ja se elimina a necessidade do cut (e teria que altera-lo!!)

Como tudo que tenho publicado no VOL, coloquei este script para download no meu site: http://gravatai.ulbra.tche.br/~elgio/disciplinas/?DISC=OUTRAS&MAT=VOL

Segue:

#!/bin/bash

TMAX=110 #tamanho em bytes

ARQ="/home/lincoln/teste/1.jpg"

# pode receber nome do arquivo como argumento
if [ "X" != "X$*" ]
then
ARQ=$1
fi

# Coloca em TAM o tamanho do arquivo em BYTES ou ZERO se nao existe
# Havia um serio problema com o teu du
# 1) ele retorna em Kbytes e nao em bytes
# 2) necessario um cut e o teu pegava apenas coluna 1 e 3
# e se o arquivo fosse maior que 999 bytes???
TAM="`stat -c "%s" $ARQ 2>/dev/null || echo "0"`"


if [ $TAM -gt $TMAX ]
then
echo "O arquivo $ARQ eh maior que $TMAX b " ;
else
echo "O arquivo $ARQ eh menor que $TMAX b " ;
fi


3. Re: conferir tamanho de arquivo [RESOLVIDO]

Rafael
rafastv

(usa Slackware)

Enviado em 10/06/2008 - 20:51h

os comandos que você precisa são o [ e o wc, olhe o manual de cada um deles.

man wc
man [

O if do shell bash também pode resolver seu problema.

man bash

Cordialmente,


4. Re: conferir tamanho de arquivo [RESOLVIDO]

Sérgio Abrantes Junior
pelo

(usa Debian)

Enviado em 10/06/2008 - 21:11h

Meu caro,

Confira o site abaixo. Ótima referência.

http://aurelio.net/shell/

Sérgio Abrantes


5. feito

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 16/06/2008 - 13:41h

Consegui fazer usando os comandos du e cut


#!/bin/sh
# contador
clear
tmax=110; #tamanho em bytes

#grava o tamanho num arquivo
tarqu="`du /home/lincoln/teste/1.jpg > tam`";

tam="`cut -c 1-3 tam`"; #obtem tamanho do arquivo


if [ $tam -gt $tmax ];
then
echo "O arquivo é maior que 110 b " ;
else
echo "O arquivo é menor que 110 b " ;
fi


6. ls

Juliao Junior
juliaojunior

(usa Debian)

Enviado em 16/06/2008 - 14:37h

ls -sk



????????????


7. So para ser didatico

Elgio Schlemer
elgio

(usa OpenSuSE)

Enviado em 16/06/2008 - 14:44h

Para ser BEM claro e não deixar coisas mal entendidas.

O du sem parametro retorna quantos BLOCOS um programa está usando (blocos de 512). Só que por questões de sistemas Operacionais, ninguem pode usar meio bloco!! Um arquivo de 1 bytes usará pelo menos 512 bytes. Isto é ainda PIOR pois depende do sistema de arquivos usados e do tamanho de bloco do mesmo!!

No que eu testei, pelo que vi, está usando blocos lógicos de 2K, logo um arquivo só terá multiplos de 2K.

Assim, um arquivo de 1 bytes retornará 4 no du (4 blocos de 512 = 2K), um arquivo de 2049 bytes (2K + 1 nytes) retornará 8 (8 blocos de 512 = 4096 bytes).

Agora sim, bem esclarecido.


8. Re: conferir tamanho de arquivo [RESOLVIDO]

Sergio Teixeira - Linux User # 499126
Teixeira

(usa Linux Mint)

Enviado em 16/06/2008 - 15:17h

Bem, para saber o tamanho de UM arquivo hoje, outro amanhã, pode-se usar simplesmente ls -l

O comando ls é muito consistente, como geralmente o são os comandos do Linux.

Agora, se você precisa fazer isso muitas vezes, realmente precisará de um script.

Os colegas já indicaram o "caminho das pedras".



9. Re: conferir tamanho de arquivo [RESOLVIDO]

Lincoln Oliveira de Souza
lincolnsol

(usa Fedora)

Enviado em 18/06/2008 - 15:16h

realmente ficou bom a mudança obrigado pela força






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts