Discrepância no tamanho do arquivo no disco e na saída ls

0

Eu tenho um script que verifica tamanhos de arquivos compactados com mais de 1 MB e gera arquivos junto com seus tamanhos como um relatório.

Este é o código:

myReport='ls -ltrh "$somePath" | egrep '\.gz$' |  awk '{print $9,"=>",$5}''
# Count files that exceed 1MB
oversizeFiles='find "$somePath" -maxdepth 1  -size +1M -iname "*.gz" -print0 | xargs -0 ls -lh | wc -l'

 if [ $oversizeFiles -eq 0 ];then
    status="PASS"

 else
     status="CHECK FAILED. FOUND FILES GREATER THAN 1MB"
 fi

echo -e $status"\n"$myReport

O problema é que o comando ls exibe os tamanhos dos arquivos como 1.0MB no relatório, mas o status é "FAIL", pois o valor da variável "$ oversizeFiles" é 2. Verifiquei o tamanho dos arquivos no disco e 2 arquivos são 1.1MB. Por que essa discrepância? Como devo modificar o script para gerar um relatório preciso?

BTW, estou em um Mac.

Veja a página do manual "find" no meu Mac OSX:

-size n[ckMGTP]
True if the file's size, rounded up, in 512-byte blocks is n.  
If n is followed by a c,then the primary is true if the file's size is n bytes (characters).  
Similarly if n is followed by a scale indicator then the file's size is compared to n scaled as:  

 k       kilobytes (1024 bytes)
 M       megabytes (1024 kilobytes)
 G       gigabytes (1024 megabytes)
 T       terabytes (1024 gigabytes)
 P       petabytes (1024 terabytes)
    
por smokinguns 08.10.2012 / 20:48

1 resposta

2

Em find , M refere-se a mebibytes, não megabytes.

find -size +1M

encontrará todos os arquivos com mais de 1.048.576 bytes.

Para localizar todos os arquivos com mais de 1,0 MB (1.000.000 bytes), use isso:

find -size +1000000c
    
por 08.10.2012 / 20:59