
Мне нужно изменить строку на целое число, потому что я проверяю размер файла (извлекаю с помощью: stat -c%s $filename) с числом, следуйте полному скрипту:
#!/bin/bash
# Variable that contain path destination file
path=/sobstitude
# Variable for size
size=1000
# Loop for file scan
for filename in /test/*;
do
# Take the size of file
filesize=$(stat -c%s $filename)
# Check if the file is empty
if [ $filesize > $size ]
then
# Replace file
mv $filename $path
fi
done
exit 0;
решение1
В bash
/ sh
переменные содержат строки, строгого понятия целых чисел нет. Строка может выглядеть как целое число и этого достаточно.
stat -c%s $filename
должен вернуть строку, которая выглядит как целое число.
В вашем случае основная проблема в операторе перенаправления >
(вероятно, у вас в рабочем каталоге теперь есть файлы с именами, которые являются числами). Этот фрагмент:
[ $размер_файла > $размер ]
должно быть
[ "$filesize" -gt "$size" ]
Ииспользуйте двойные кавычки вокруг подстановок переменных и подстановок команд.
решение2
Нет необходимости «конвертировать» типы данных. Вы можете использовать -gt
или -lt
для сравнения чисел:
➜ size="$(stat -c%s test.mp4)"; [[ "$size" -gt 4000 ]] && echo "bigger" || echo "smaller"
bigger
➜ size="$(stat -c%s test.mp4)"; [[ "$size" -gt 400000 ]] && echo "bigger" || echo "smaller"
smaller
В принципе это >
не неправильно. Вы можете использоватьарифметические выражениядля выполнения сравнения.
Я использовал [[
вместо [
для егорасширенные возможности.
Обратите внимание, что все расширения переменных должны быть заключены в двойные кавычки. Особенно с $filename
и $path
, если какие-либо из них содержат пробелы, ваш скрипт не будет работать.
решение3
Ребята, я решил эту проблему, изменив это:
if ((filesize > size))
Теперь работа, спасибо за поддержку