我们在晚上将图像导入到我们的系统中,我需要确保所有图像的宽度或高度至少为1000px,我需要排除缓存文件夹中的图像。
我不是bash专家。我从几个来源拼凑了这个。 我用find来查找所有产品图片,并在此处排除缓存文件夹。
find /overnight/media/catalog/product/ \( -name cache -prune \) -o -name '*' -exec file {} \; | grep -o -P '^.+: \w+ image'
我需要在找到的每个图像文件上运行mogrify。
mogrify -resize "1000x1000>"
我该怎么做?如果我的方法不是最好的,请告诉我什么是更好的方法。
答案 0 :(得分:0)
假设您的find命令按预期工作,这样的事情就足够了
#!/bin/bash
set -e
FILES=`find /overnight/media/catalog/product/ \( -name cache -prune \) -o -name '*' -exec file {} \; | grep -o -P '^.+: \w+ image'`
AMOUNT=`echo $FILES | wc -w`
if [ ! -z "$FILES" ];
then
mogrify -resize "1000x1000>" $FILES
fi
echo "Done! $AMOUNT files found and changed!"
...
答案 1 :(得分:0)
我接受了本杰明和塞拉提出的建议并提出了这个问题。 在文件运行mogrify之前,它会查看图像是否具有适当的大小。我确定有一个更好的"方式,但这似乎有效。
#!/bin/bash
IFS=$'\n'
set -e
minimumWidth=1000
minimumHeight=1000
FILES=$(find /overnight/media/catalog/product/ \( -name cache -prune \) -o -name '*' -type f -exec file {} \; | awk -F: '{ if ($2 ~/[Ii]mage|EPS/) print $1}')
AMOUNT=`echo $FILES | wc -w`
COUNTER=0
if [ ! -z "$FILES" ];
then
for F in $FILES
do
imageWidth="$(identify -format "%w" "$F")"
imageHeight="$(identify -format "%h" "$F")"
if [ "$imageWidth" -ge "$minimumWidth" ] || [ "$imageHeight" -ge "$minimumHeight" ]; then
echo "Not Changed. " ''"$imageWidth"x"$imageHeight"'' "$F"
else
echo "Initial Size"
ls -lah "$F" | awk -F " " {'print $5'}
mogrify -resize ''"$minimumWidth"x"$minimumHeight<"'' "$F"
echo "Resized Size"
ls -lah "$F" | awk -F " " {'print $5'}
let COUNTER=COUNTER+1
NewimageWidth="$(identify -format "%w" "$F")"
NewimageHeight="$(identify -format "%h" "$F")"
echo "Mogrifyed. $NewimageWidth"x"$NewimageHeight"
fi
done
fi
echo "Done! $COUNTER of $AMOUNT files found and changed!"