Bash 脚本查找所有图像并修改图像
Bash script find all images and mogrify images
我们在晚上将图像导入系统,我需要确保所有图像的宽度或高度至少为 1000 像素,并且我需要排除缓存文件夹中的图像。
我不是 bash 专家。我从几个来源拼凑了这个。
我使用 find 查找所有产品图片并在此处排除缓存文件夹。
find /overnight/media/catalog/product/ \( -name cache -prune \) -o -name '*' -exec file {} \; | grep -o -P '^.+: \w+ image'
我需要 运行 修改找到的每个图像文件。
mogrify -resize "1000x1000>"
我该怎么做?如果我的方法不是最好的,请告诉我什么是更好的方法。
假设您的查找命令如您所愿,像这样的东西就足够了
#!/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!"
......
我采纳了 Benjamin 和 Sierra 的建议并想出了这个。
在对文件运行 mogrify 之前,它会查看图像的大小是否合适。我确定有 "better" 方法,但这似乎有效。
#!/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 ( ~/[Ii]mage|EPS/) print }')
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 '}
mogrify -resize ''"$minimumWidth"x"$minimumHeight<"'' "$F"
echo "Resized Size"
ls -lah "$F" | awk -F " " {'print '}
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!"
我们在晚上将图像导入系统,我需要确保所有图像的宽度或高度至少为 1000 像素,并且我需要排除缓存文件夹中的图像。
我不是 bash 专家。我从几个来源拼凑了这个。 我使用 find 查找所有产品图片并在此处排除缓存文件夹。
find /overnight/media/catalog/product/ \( -name cache -prune \) -o -name '*' -exec file {} \; | grep -o -P '^.+: \w+ image'
我需要 运行 修改找到的每个图像文件。
mogrify -resize "1000x1000>"
我该怎么做?如果我的方法不是最好的,请告诉我什么是更好的方法。
假设您的查找命令如您所愿,像这样的东西就足够了
#!/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!"
......
我采纳了 Benjamin 和 Sierra 的建议并想出了这个。 在对文件运行 mogrify 之前,它会查看图像的大小是否合适。我确定有 "better" 方法,但这似乎有效。
#!/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 ( ~/[Ii]mage|EPS/) print }')
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 '}
mogrify -resize ''"$minimumWidth"x"$minimumHeight<"'' "$F"
echo "Resized Size"
ls -lah "$F" | awk -F " " {'print '}
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!"