2016-07-07 10 views
0

Wir haben Bilder in unser System in der Nacht importiert, und ich muss sicherstellen, dass alle Bilder mindestens 1000px breit oder groß sind und ich Bilder aus dem Cache-Ordner ausschließen müssen.Bash Script finde alle Bilder und mogrify Bilder

Ich bin kein Bash-Experte. Ich habe das aus mehreren Quellen zusammengetragen. Ich habe gefunden, um alle Produktbilder zu finden und den Cache-Ordner hier auszuschließen.

find /overnight/media/catalog/product/ \(-name cache -prune \) -o -name '*' -exec file {} \; | grep -o -P '^.+: \w+ image' 

Ich muss Mogrify für jede Bilddatei, die gefunden wird, ausführen.

mogrify -resize "1000x1000>" 

Wie mache ich das? Wenn meine Herangehensweise nicht die beste ist, lassen Sie es mich bitte wissen, was ein besserer Ansatz wäre.

+0

Sie könnten 'identify' laufen, um zu sehen, ob Bild muss auch –

+0

@Sierra gute Idee der Größe verändert werden, können Sie mir einen Vorschlag, wie man das umsetzen? – Brad

Antwort

0

Angenommen, Ihre Entdeckung Befehl funktioniert, wie Sie beabsichtigen, so etwas wie dies sollte ausreichen

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

......

0

Ich nahm, was Benjamin und Sierra vorgeschlagen und kam mit dieser. Es sieht aus, ob das Bild die richtige Größe hat, bevor es mogrify für die Datei ausführt. Ich bin mir sicher, dass es einen "besseren" Weg gibt, aber das scheint zu funktionieren.

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