Categoria : Linux
Publicado por Anderson em 26/12/2012

Aguardando término de escrita em Arquivo via Shell

 

Muitas vezes nos deparamos com cenários onde ao transferirmos arquivos de uma origem para um destino, um processo é disparado antes de que o arquivo seja definitivamente transferido. Neste caso, o processo lê um arquivo incompleto e o processo fica quebrado. E o pior que para se descobrir que o real motivo é este, desperdiçamos muito tempo com análises que poderiam ser facilmente evitadas com o uso deste script a seguir.

O script é muito simples, você define que arquivo será analisado e o mesmo dispara um processo de loop verificando o tamanho real a cada 5 segundos… A cada volta no laço, caso o tamanho não tenha alcançado o tamanho total do arquivo, uma outra volta no laço é realizada incrementando a variável até que o tamanho total seja alcançado.


# VERIFICANDO SE ARQUIVO TERMINOU DE SER TRANSFERIDO PARA RENOMEA-LO
file_i=$caminho/$arquivo
prev_size=-1 # initialize variable
new_size=`/usr/bin/du -sk “$file_i” | awk ‘{print $1}’` # get current file size

while [ $prev_size != $new_size ] # repeat until these values are the same
do
/bin/sleep 5 # check every 5 seconds
tmp_size=$new_size # move to intermediate value
new_size=`/usr/bin/du -sk “$file_i” | awk ‘{print $1}’` # get new file size
prev_size=$tmp_size
done

Have fun.