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))

今は仕事中です。サポートありがとうございます

関連情報