2017-07-06 17 views
0

私は絵が900x900ピクセルの解像度を持ち、ファイル名が、私はこれを行うにしようとしています何_thumbまたは_vバッシュスクリプトIF条件

を含むことを許可されていないかどうかを確認する必要があります行:
画像が900x900ピクセルではなく、_vまたは_thumb =が含まれていない場合、ファイル拡張子の前にファイル名の末尾に_thumbを追加します。

ラインそれはすべてについてです:

if file $picture | grep -q 900x900 && ! file $picture | grep -q _thumb && ! file $picture | grep -q _v; 

スクリプト:

#Change to current .sh directory 
cd -P -- "$(dirname -- "$0")" 
for picture in */*/Templates/*.jpg 
do 
    filename=${picture##*/} 
    filename1=$(echo "$filename" |sed 's/.\{4\}$//') 
    parent_dir="$(dirname -- "$(/usr/local/bin/realpath "$picture")")" 

    #Colors 
    red=`tput setaf 1` 
    green=`tput setaf 2` 
    magenta=`tput setaf 5` 
    reset=`tput sgr0` 


    if file $picture | grep -q 900x900 && ! file $picture | grep -q _thumb && ! file $picture | grep -q _v; 
     then 
      mv -v "$picture" "$parent_dir/"$filename1"_thumb.jpg" 
      echo "${green} [PASS] $filename1 Thumbnail 900x900 found and renamed ${reset}" 
     else 
      echo "${magenta} [WARNUNG] $filename1 contains _thumb already or is a _v picture or isn't 900x900 pixels ${reset}" 
     fi 
+0

問題は、900x900であっても、キーワードを含んでいないにもかかわらず画像が認識されないことです。 ありがとうございます。 –

+0

は、http://www.shellcheck.net/ ...を使用することを提案しています。たとえば、変数を引用してください。 grep -q '900x900''を残りの条件なしに実行し、動作するかどうかを確認します。 – Sundeep

答えて

0

私はいくつかの問題を参照してください。 #3、#4、#5が一番重要です。あなたの最初の行に

  1. ターゲットシェル
  2. あなたは$filename1に内部二重引用符をエスケープする必要がdone
  3. forループを終了する必要があります。周囲の引用符は現在これを引用していません。
  4. その行の変数を二重引用符で囲みます。
  5. イメージサイズを探しているのか、そのファイルに900x900があるのか​​を明確にしていますか?原因grep -q 900x900は画像サイズを見つけることができません。あなたはimagemagik identifyと組み合わせる必要があります。修正を

#!/bin/bash 
#Change to current .sh directory 
cd -P -- "$(dirname -- "$0")" 
for picture in */*/Templates/*.jpg 
do 
    filename=${picture##*/} 
    filename1=$(echo "$filename" |sed 's/.\{4\}$//') 
    parent_dir="$(dirname -- "$(/usr/local/bin/realpath "$picture")")" 

    #Colors 
    red=`tput setaf 1` 
    green=`tput setaf 2` 
    magenta=`tput setaf 5` 
    reset=`tput sgr0` 


    if file "$picture" | grep -q 900x900 && ! file "$picture" | grep -q _thumb && ! file "$picture" | grep -q _v; 
     then 
      mv -v "$picture" "$parent_dir/\"$filename1\"_thumb.jpg" 
      echo "${green} [PASS] $filename1 Thumbnail 900x900 found and renamed ${reset}" 
     else 
      echo "${magenta} [WARNING] $filename1 contains _thumb already or is a _v picture or isn't 900x900 pixels ${reset}" 
     fi 
done 
0

は、 "ファイル$画像| grepのの900x900" を使用していないファイル名が900x900が含まれているかどうかわからないので。私は少し_vと_thumbだけの拡張子の前に表示されていることを仮定することによって、あなたのスペックから外れている

if [[ "900 900" == $(identify -format '%w %h' "$picture") ]] ; then 
    if [[ $picture != *_v.jpg && $picture != _thumb.jpg ]] ; then 
    mv "$picture" "${picture%.jpg}_thumb.jpg" 
    fi 
fi 

:私は、コマンドの使用はのようにそれはImageMagickのパッケージに存在する特定助言します。 best_view.jpgのような予期しないマッチを避ける方が賢明だと思います。

PS:ファイル名またはディレクトリ名にスペースが含まれていると、スクリプトが正常に動作していることを必ず確認してください。