Bash
Nós configuramos um loop for
com glob
expressão *LM.bm[p]
, para que possamos desambiguar o cenário do arquivo com nome terminando em p
de fato existente versus não. Esta é uma variedade básica de shopt nullglob
. Se virmos um nome terminar em p
= > o shell foi capaz de expandir esse glob, ou seja, tal arquivo existia. OTOH, se virmos um nome terminar em [p]
= > o shell era NOT
capaz de expandir o significado glob *LM.bm[p]
, não havia nenhum arquivo com esse nome.
O próximo passo é cortar os 6 caracteres (L M. b m p) do nome do arquivo que agora sabemos que existe. Usando a parte restante do nome do arquivo, configuramos 3 parâmetros posicionais correspondentes às 3 extensões .wed .are .tis
.
A chave é que, mesmo que uma das extensões não seja expandida, seu nome será exibido com o último caractere incluído em [ ]
. = > Todos os 3 arquivos não estão todos presentes. = > pule isso . E a cláusula else = > Todos os 3 arquivos estão presentes + 1 (* LM.bmp) já está presente devido à nossa verificação prévia. Daí vemos todos os 4 arquivos e = > apto para impressão.
for i in *LM.bm[p]; do
case $i in
*[p] )
f=${i%??????}
set -- "$f".we[d] "$f".ar[e] "$f".ti[s]
savIFS=$IFS
IFS=/
case "$*/" in
*"]/"* ) : ;;
* ) printf '%s\n' "$f" ;;
esac
IFS=$savIFS
esac
done