As respostas baseadas em bash existentes irão quebrar arquivos com espaços em seus nomes e chamar comandos externos desnecessários para inicializar.
Supondo que o bash 4+ esteja disponível (provavelmente é, verifique com bash --version
), você pode definir globstar para globalização recursiva:
shopt -s globstar
for f in ./**/*.markdown; do markdown.py-2.6 "$f" > "${f%.markdown}.html"; done
Isso também pode ser feito com o find; para a absoluta proteção contra balas, você deve usar um delimitador de bytes nulos:
find . -name '*.markdown' -print0 | while read -d $'find . -name '*.markdown' -exec bash -c 'markdown.py-2.6 "$0" > "${0%.markdown}.html" '{}' \;
' f; do
markdown.py-2.6 "$f" > "${f%.markdown}.html"
done
Esse problema em particular também pode ser resolvido usando a opção -exec
do find, assim:
shopt -s globstar
for f in ./**/*.markdown; do markdown.py-2.6 "$f" > "${f%.markdown}.html"; done
No entanto, isso não é tão fácil de estender para scripts de várias linhas.