画像サイズを800pxに調整して比率を維持するbashスクリプトを作成したいと思います。
私のコードはbashでは動作しませんが、identify
単一の画像では動作します。
#!/bin/bash
for file in ./**/public/uploads/*.*; do
width = $(identify -format "%w" ${file})
if [ width > 800 ]
then
echo $file // resize image
fi
done
exit 0;
質問:私はPermission denied
3号線を利用します。
以下のいずれかの回答で提供されたソリューションを試しました。
#!/bin/bash
shopt -s globstar
for file in ./**/public/uploads/*.*; do
width=$(identify -format "%w" "${file}")
if [ "$width" -gt 800 ]
then
echo "$file"
fi
done
exit 0;
これで、次のエラーメッセージが表示されます。
identify.im6: Image corrupted ./folder/public/uploads/ffe92053ca8c61835aa5bc47371fd3e4.jpg @ error/gif.c/PingGIFImage/952.
./images.sh: line 6: width: command not found
./images.sh: line 7: [integer expression expected
答え1
あなたのスクリプトには2つの明らかな問題があります。まず、デフォルトでは有効になっていないオプション**
として提供されます。globstar
対話型シェルでこれを有効にした可能性がありますが、スクリプトに対してもこれを行う必要があります。
これは実際に比較するのではなく、$width
文字列を比較することですwidth
。$
必要[ ]
。
最後の問題は、実行中のファイルの一部が破損しているか、イメージではないことです。とにかくidentify
コマンドが失敗するので$width
空です。簡単な解決策は$width
null(-z "$width"
)をテストし、null(! -z "$width"
)のみを比較することです。
この試み:
#!/bin/bash
shopt -s globstar
for file in ./**/public/uploads/*.*; do
width=$(identify -format "%w" "${file}")
if [[ ! -z "$width" && "$width" -gt 800 ]]
then
echo "$file"
fi
done
exit 0;
答え2
問題(または問題の少なくとも1つ)はあなたが言ったことです。
width = $(identify -format "%w" "${file}")
次のように前後のスペースを削除する必要があります=
。
width=$(identify -format "%w" "${file}")