コンテキスト: macOS Catalina(zsh)
このスクリプトは、すべてのJPEGファイルを処理するために使用されます。このスクリプトは.JPGファイルを処理しませんが、.jpgファイルは処理します。
top=/Users/user/Desktop/
for file in $top/**/*.jp*g(NDn.); do #selects filetypes: .jpg .jpeg
mogrify -auto-orient \
-gravity northWest \
-font "Arial-Bold-Italic" \
-pointsize 175 \
-fill red \
-annotate +30+30 $n \
-- $file &&
echo $file "was watermarked with" $n | tee -a forLooplog.txt
(( n++ ))
done
大文字と小文字を区別せずに.JPG .JPEGファイルをキャプチャするように2行目を変更するにはどうすればよいですか?
答え1
特にあなたの場合、globはです$top/**/*.jpg
。いいえcaseglob
グローバルモードのすべてのパスコンポーネントに影響を与えるため、このオプションをグローバルにオフにします(オンとnocaseglob
同じ)。
$ top=a zsh +o caseglob -c 'print -rC1 -- $top/*.jpg'
a/foo.jpg
a/foo.JPG
a/FOO.jpg
a/FOO.JPG
A/foo.jpg
A/foo.JPG
A/FOO.jpg
A/FOO.JPG
jpg
()と関連のないディレクトリ()で、同じ名前が大文字であるすべてのファイルを見つける方法を確認してください。そのようなディレクトリがなくても、zsh はそのディレクトリを探し続けます。つまり、グローバル拡張コストをより高価にするコンポーネントを形成する各ディレクトリの内容をリストする必要があります。JPG
$top
a
A
$top
IMO、nocaseglob
このオプションは忘れておくことをお勧めします。これは単に²との互換性のためにzshに追加されておりbash
、大文字と小文字を区別しないファイルシステムAPIを持つCygwin / macosなどのシステムユーザーの生活をより簡単にするために追加された可能性があります。
(#i)
代わりにglob演算子(with)を使用しましたextendedglob
。ここで、globのどの部分が大文字と小文字を区別する必要があるかを指定できます(~(i)
ksh93に似ています)。
set -o extendedglob # needed for (#i)
for file in $top/**/*.(#i)jp(e|)g(NDn.); do
またはこれを行うこともできます:
for file in $top/**/*.[jJ][pP]([eE]|)[gG](NDn.); do
sh
大文字と小文字を区別しないグローバル演算子を持たない他のシェルと同じです。
また、代わりに*.jp(|e)g
ファイル*.jp*g
名と一致します。my.jpeg.import.log
¹、、、、、CASEGLOB
大文字と小文字はCASE_GLOB
、C_A_se_G_lob
オプション名では無視されます。オプションのサポートをオフにすることは、no
POSIX shオプション(およびzsh自体を含む他のシェル)を使用して混乱に対応する試みです。これらのいくつかはno
プレフィックスが付いており、一部はプレフィックスが付いていません。
²bashは異なる動作をしますが(私の考えでは、少なくともファイル名から大文字と小文字を区別するシステムでは良いです)、この場合/ファイルのみがa/*.jpg
見つかります。大文字と小文字を区別しないからではありません。jpg
JPG
a
A
パスコンポーネント実際にはglob演算子があります(/file[a]/*.jpg
にもありますjpg
)。JPG
A