Скрипт Bash преобразует «строку» в число

Скрипт Bash преобразует «строку» в число

Мне нужно изменить строку на целое число, потому что я проверяю размер файла (извлекаю с помощью: 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))

Теперь работа, спасибо за поддержку

Связанный контент