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
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)
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
Tags ls mac shell-script