Acho que você poderia fazer isso com zsh
sozinho (ou seja, com zmv
):
autoload zmv
for name ($pages)
zmv -Qn "(**/)(*${name}.md)(.N)" "\${pages[(i)${name}]}-\"
o -n
significa que não há execução ( dry-run ), então você terá uma saída como:
mv -- 'some dir/deeper/gfoo.md' 'some dir/deeper/1-gfoo.md'
mv -- 'some dir/zfoo.md' 'some dir/1-zfoo.md'
mv -- afoo.md 1-afoo.md
mv -- nfoo.md 1-nfoo.md
mv -- bar.md 2-bar.md
mv -- baz.md 3-baz.md
.........
se você está feliz com o resultado, remova o -n
para realmente mover os arquivos (ou substitua-o por -i
se você quiser que ele seja executado no modo interativo).
Como funciona:
$name
é o elemento da matriz e ${pages[(i)${name}]}
é a posição do elemento na matriz, portanto, por exemplo, if pages=(foo bar baz bom top)
then:
for name ($pages) printf '%s %s\n' ${pages[(i)$name]} $name
1 foo
2 bar
3 baz
4 bom
5 top