Padrões de globulação de concha não são expressões regulares . Eles podem ser parecidos, mas funcionam de maneira diferente em alguns aspectos.
A expressão regular [0-9a-z]{16}
corresponde a uma sequência que contém uma execução de 16 caracteres do intervalo de caracteres mencionado (a sequência que contém a correspondência pode ser maior).
O padrão de globulação de concha equivalente seria algo como
*[0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z][0-9a-z]*
Isso ocorre porque
- Padrões globosos não suportam modificadores que dizem "repita os N tempos anteriores".
- Os padrões de globbing são, por padrão, ancorados no início e no final. É por isso que insiro
*
no início e no final do padrão. Um *
corresponde a qualquer número de qualquer caractere. Remova-os se quiser corresponder exatamente 16 caracteres.
Você pode criar uma string de 16 [0-9a-z]
usando Perl:
$ pattern="$( perl -e 'print "[0-9a-z]" x 16' )"
Com bash
, você pode optar por iterar todos os nomes no diretório atual e testar se os nomes correspondem à sua expressão regular:
for name in *; do
if [[ -f "$name" ]] && [[ "$name" =~ ^[0-9a-z]{16}$ ]]; then
echo mv "$name" "$name.txt"
fi
done
Remova o echo
quando souber que está fazendo a coisa certa.
Observe que ancorei o padrão para que os nomes mais longos não correspondam. Também estou certificando-me, com o -f
test, que os nomes que recebemos são realmente apenas de arquivos regulares.