Executar recursivamente o comando composto do imagemagick na árvore de diretórios

2

Eu tenho uma grande árvore de diretórios com muitas subpastas e muitas imagens dentro de cada uma. Eu encontrei um script que aplica marca d'água a todas as imagens dentro de um diretório, no local, sobrescrevendo a imagem original. Eu estou procurando a melhor maneira de percorrer todas as pastas e subpastas e executar o comando "compor" para cada imagem no meu servidor linux. Aqui está o script original que encontrei

#!/bin/bash

###########################################
# NAME:     wn-ow
# AUTHOR:   Linerd (http://tuxtweaks.com), Copyright 2009
# LICENSE:  Creative Commons Attribution - Share Alike 3.0 http://creativecommons.org/licenses/by-sa/3.0/
#       You are free to use and/or modify this script. If you choose to distribute this script, with or
#       without changes, you must attribute credit to the author listed above.
# REQUIRES: ImageMagick, coreutils
# VERSION:  1.0
# DESCRIPTION:  A script to add a watermark and overwrite all images in a directory.
#
# This script will watermark all of the images in a directory. Warning! This will overwrite the files.
###########################################

# Initialize variables
WM=$HOME/public_html/image/catalog/logo-website/watermark.png  # This is the path to your watermark image
SCALE=100                          # This sets the scale % of your watermark image

# Warning
echo -e "This will overwrite all of the images in this directory."\n"Are you shure want to continue? {Y/n}"
read REPLY

if
    [ "$REPLY" != "n" ] && [ "$REPLY" != "N" ]
then
    file -i * | grep image | awk -F':' '{ print $1 }' | while read IMAGE
        do
            echo Watermarking $IMAGE
            composite -dissolve 40% -gravity SouthEast -quality 100 \( $WM -resize $SCALE% \) "$IMAGE" "$IMAGE"
        done
else
    echo exiting
    exit 0
fi

exit 0

Devo usar uma combinação de "find. -name * .jpg" ou outra coisa?

    
por Roberto C 05.10.2015 / 00:37

1 resposta

0

O script já verifica o diretório para arquivos de imagem, mas se você quiser ajustá-lo para percorrer todos os diretórios e não solicitar um para cada um, é melhor reescrevê-lo. Algo como:

#!/bin/bash

WM=$HOME/public_html/image/catalog/logo-website/watermark.png  # This is the path to your watermark image
SCALE=100                          # This sets the scale % of your watermark image
STARTDIR="/home/whatever/images"   # This is the directory to start in

for imagedir in $( find $STARTDIR -type d )
do
  echo "Running in $imagedir ..."
  cd $imagedir
  file -i * | grep image | awk -F':' '{ print $1 }' | while read IMAGE
  do
    echo "Watermarking $IMAGE"
    composite -dissolve 40% -gravity SouthEast -quality 100 \( $WM -resize $SCALE% \) "$IMAGE" "$IMAGE"
  done
done
    
por 05.10.2015 / 01:01