У меня есть сценарий, который проверяет размер сжатых файлов больше 1 МБ и выводит файлы вместе с их размерами в виде отчета.

Это код:

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

Проблема в том, что команда ls выводит файлы размером 1,0 МБ в отчете, но состояние "FAIL", поскольку значение переменной «$ oversizeFiles» равно 2. Я проверил размеры файлов на диске, и 2 файла 1.1MB. Почему это несоответствие? Как мне изменить скрипт, чтобы я мог генерировать точный отчет?

Кстати, я на Mac.

Вот что говорит man-страница для "find" на моем 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)

1 ответ1

2

В find , M самом деле относится к мегабайтам, а не мегабайтам.

find -size +1M

найдет все файлы размером более 1 048 576 байт.

Чтобы найти все файлы размером более 1,0 МБ (1 000 000 байт), используйте вместо этого:

find -size +1000000c

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .