Para um dos arrays:
for num in "${pri[@]}"; do
name="proc_${num}_test.data"
if [ ! -f "$primary/$name" ]; then
printf '"%s" not found in "%s"\n' "$name" "$primary" >&2
fi
done
Ou seja, faça um loop sobre os números na matriz, construa o nome do arquivo esperado e teste se o nome de arquivo esperado existe¹ no diretório. Se isso não acontecer, escreva uma mensagem de diagnóstico no fluxo de erro padrão.
Fazendo os dois conjuntos de arquivos de uma só vez:
set -- "$primary" "$secondary"
typeset -n array
for array in pri snd; do
for num in "${array[@]}"; do
name="proc_${num}_test.data"
if [ ! -f "$1/$name" ]; then
printf '"%s" not found in "%s"\n' "$name" "$1" >&2
fi
done
shift
done
Isso introduz uma variável de referência de nome array
. Ao acessar ${array[@]}
, a variável cujo nome foi atribuído a array
(no loop, primeiro pri
, em seguida, snd
) será acessada.
Os nomes dos diretórios $primary
e $secondary
são atribuídos aos parâmetros posicionais $1
e $2
antes do loop usando set
, e dentro do loop nós shift
$2
into $1
quando nós terminamos com o original $1
.
¹ e é um arquivo regular (ou um link simbólico para um arquivo normal acessível), mude para [ ! -e "$primary/$name" ] && [ ! -L "$primary/$name" ]
para verificar se o arquivo existe independentemente de seu tipo.