Se sempre houver dois , é simples:
for f in file+([0-9]).png; do zip "${f%png}zip" "$f" "${f/./@2x.}"; done
Observe que o acima funcionará como está na linha de comando. Se você pretende usá-lo em um script, coloque shopt -s extglob
em algum lugar antes dessa linha. ( extglob
é habilitado por padrão apenas em shells interativos).
No antigo bash
não está lidando com padrões estendidos, essa solução feia funcionará, mas é melhor mudar a lógica como sugerido em outra resposta por Leonid:
for f in file[0-9].png file*[0-9][0-9].png; do zip "${f%png}zip" "$f" "${f/./@2x.}"; done