Contexto: macOS Catalina (zsh)
Este script é para processar todos os arquivos JPEG. Este script não processa arquivos .JPG, mas processa arquivos .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
Como a segunda linha pode ser modificada para não diferenciar maiúsculas de minúsculas e interceptar arquivos .JPG .JPEG?
Especialmente para o seu caso em que o glob é
$top/**/*.jpg
, eu não desligaria acaseglob
opção (o mesmo quenocaseglob
ligar¹) globalmente, pois isso afeta todos os componentes do caminho nos padrões glob:Veja como ele encontrou todos os arquivos
jpg
e em ( ), mas também aqueles em um diretório não relacionado ( ) que por acaso tinha o mesmo nome, mas em letras maiúsculas. Mesmo se você não tiver esses diretórios, o zsh ainda os procurará, o que significa que ele precisa listar o conteúdo de cada diretório que compõe os componentes para tornar essa expansão glob mais cara.JPG
$top
a
A
$top
IMO,
nocaseglob
é melhor deixar essa opção esquecida. Ele só foi adicionado ao zsh para compatibilidade combash
², e provavelmente adicionado para facilitar a vida dos usuários de sistemas como Cygwin / macos que possuem APIs de sistema de arquivos que não diferenciam maiúsculas de minúsculas.Em vez disso, usei o
(#i)
operador glob (comextendedglob
) onde você pode especificar qual parte de qual glob deve não diferenciar maiúsculas de minúsculas (semelhante ao~(i)
de ksh93):Ou você sempre pode fazer:
como você faria em
sh
qualquer shell sem operadores glob que não diferenciam maiúsculas de minúsculas.Observe também que
*.jp(|e)g
em vez de*.jp*g
que corresponderia a nomes de arquivos, como por exemplo.my.jpeg.import.log
¹ ou
CASEGLOB
,CASE_GLOB
,C_A_se_G_lob
, case e underscores são ignorados nos nomes das opções, e o suporteno
para desativar uma opção é tentar acomodar a confusão com as opções POSIX sh (e outros shells incluindo o próprio zsh) onde algumas opções são nomeadas com umno
prefixo e alguns sem nenhuma razão imediatamente óbvia.² embora o comportamento do bash seja diferente (e preferível IMO, pelo menos em sistemas com nomes de arquivos com distinção entre maiúsculas e minúsculas) nesta instância em que
a/*.jpg
apenas encontrariajpg
/JPG
arquivos ema
, nãoA
como apenas correspondência insensível a maiúsculas e minúsculas para componentes de caminho que possuem operadores glob ([a]/*.jpg
também encontraria os arquivosjpg
/ em ).JPG
A