Если вы хотите запросить по одному файлу за раз, stat
является инструментом общего назначения -для запроса различных атрибутов конкретного файла, включая размер среди многих других.
FileName="foo"
FSize=1048576
if [ $(stat -f %z "$FileName") -gt $FSize ]; then
printf "File %s is larger than %d bytes.\n" "$FileName" $FSize
fi
Если то, что вы действительно ищете, — это способ запроса большого количества файлов и извлечения имен только тех файлов, которые превышают определенный размер, тогда find
может быть тем, что вам нужно.
Учитывая группу файлов, расположенных в DIRECTORY, будут найдены те файлы, размер которых превышает байты FSize:
DIRECTORY="/path/to/your/files"
FSize="1M"
find $DIRECTORY -type f -size +$FSize
Использование find
для определенного файла в$filepath
:
if [ -n "$(find "$filepath" -prune -size +1000000c)" ]; then
printf '%s is strictly larger than 1 MB\n' "$filepath"
fi
Это использует find
для запроса размера конкретного файла в $filepath
. Если размер превышает 1000000 байт, find
напечатает путь к файлу, в противном случае ничего не будет сгенерировано. Тест -n
верен, если длина строки не равна -нулевой, что в данном случае означает, что find
что-то вывело, что, в свою очередь, означает, что файл больше 1 МБ.
Вы об этом не спрашивали :Поиск всех обычных файлов размером более 1 МБ под некоторым $dirpath
и печать короткого сообщения для каждого:
find "$dirpath" -type f -size +1000000c \
-exec printf '%s is larger than 1 MB\n' {} +
Эти фрагменты кода должны быть переносимы на любой Unix.
Также обратите внимание, что использование <
или >
в тесте проверяет, сортируются ли две вовлеченные строки определенным образом лексикографически. Эти операторы не выполняют числовое сравнение. Для этого используйте-lt
("меньше" ),-le
("меньше или равно" ),-gt
("больше" )или-ge
("больше или равно" "),-eq
("равно" )или-ne
("не равно" ).Эти операторы выполняют целочисленное сравнение.