我想创建一个 bash 脚本来将图像大小调整到 800px 并保持比例......
我的代码在 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
我在您的脚本中发现两个明显的问题。首先,它是由默认情况下未启用的选项**
提供的。globstar
您可能已经在交互式 shell 中激活了它,但您也需要为脚本执行此操作。
然后,您实际上不是在比较,$width
而是在比较 string width
。$
中需要[ ]
.
最后一个问题是,您正在运行的某些文件已损坏,或者不是图像。无论如何,该identify
命令对它们失败,因此$width
为空。一个简单的解决方案是测试是否$width
为空 ( -z "$width"
),并且仅比较是否为空 ( ! -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
问题(或者至少是问题之一)是你说的
width = $(identify -format "%w" "${file}")
您需要消除 之前和之后的空格=
,如下所示:
width=$(identify -format "%w" "${file}")