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!"