0

imagemagick スクリプトのディレクトリの for ループを受け入れるシェル スクリプトを使用したいと考えています。シェルスクリプトは次のとおりです。

#!/bin/sh
# ~/scripts/mkhdr.sh
                                                                                                                                         
convert -gaussian $1 $2 - | composite -compose overlay $2 - $3

したがって、for ループは次のようになります。

for i in *.(tif|jpg);do;echo converting $i;~/scripts/mkhdr.sh 3 ./$i ./SSP_JPGs/$i:r.jpg;done

スペースのないファイルのディレクトリで正常に動作します。ファイル名にスペースが含まれるディレクトリでは失敗します。

アップデート:

Adrian Frühwirthのおかげで、次のように機能します。

#!/bin/sh
# ~/scripts/mkhdr.sh
                                                                                                                                         
convert -gaussian "$1" "$2" - | composite -compose overlay "$2" - "$3"

コマンドライン:

for file in *.(tif|jpg);do;echo converting "${file}";~/scripts/mkhdr.sh 3 "${file}" "/Users/me/Desktop/${file}";done
4

2 に答える 2

2

あなたが投稿した両方のスニペットにはいくつか問題があります。2番目から始めましょう:

for i in *.(tif|jpg); do
    echo converting $i
    ~/scripts/mkhdr.sh 3 ./$i ./SSP_JPGs/$i:r.jpg
done
  1. すでに指摘したように、ファイル名のスペースを考慮して変数を引用する必要があります。
  2. zshの構文には詳しくありませんが、 ANDファイル:rを検索しているため、ファイルは考慮されません。.jpg.tif:r.jpg.tif

最初のスニペット:

#!/bin/sh
# ~/scripts/mkhdr.sh

convert -gaussian $1 $2 - | composite -compose overlay $2 - $3

他のスニペットで変数を引用しても、ここでは引用されていないため、スペースを含むファイル名が問題になります。

次に、会話スニペットから始めて、いくつかの修正を適用しましょう。

#!/bin/sh
# ~/scripts/mkhdr.sh

convert -gaussian "$1" "$2" - | composite -compose overlay "$2" - "$3"
  • 安全のために、常に変数を引用符で囲んでください。

そして呼び出しスニペット:

for file in *.tif *.jpg; do
        echo "converting '${file}'"
        ~/scripts/mkhdr.sh 3 "${file}" "./SSP_JPGs/${file%.*}"
done
  • 引用符で囲まれた変数。
  • *.(tif|jpg)構文を に変更しました*. tif *.jpg。これはすべてのzshbashおよびksh93で機能するはずですが、これを使用する必要はありません。
  • $i:r.jpgに変更${i%.*}。これにより、ファイル拡張子である.*の値の後ろからの短縮一致が削除されます。iこれは、すべてで機能するはずzshです。bashksh93
于 2013-04-06T10:42:29.127 に答える
1

使用できますread。次に、次のすべての出現を引用します$i

ls *.tif *.jpg | while read i; do
  echo converting "$i";
  ~/scripts/mkhdr.sh 3 "./$i" "./SSP_JPGs/$i:r.jpg";
done

$i:r.jpgその部分についてはよくわかりませんが、ファイル名に:r.jpgを追加しますか??

于 2013-04-05T19:49:07.090 に答える