Eu tenho uma pasta cheia de arquivos HTML:
001.htm
002.htm
003.htm
…
Eu quero rodar o Pandoc para convertê-los em arquivos Markdown de nome similar:
001.md
002.md
003.md
Este comando funciona em um deles:
pandoc -f html -t markdown 001.htm -o 001.md
E eu quero usar find
e xargs
para executar automaticamente um comando semelhante em todos os arquivos da pasta.
Cheguei até aqui:
find *.htm | xargs -I {} -n 1 pandoc -f html -t markdown -o {}
… O que trunca todos os arquivos no diretório, então agora estou perguntando antes de realmente quebrar alguma coisa.
O que está errado com o meu comando acima e / ou o que é uma maneira completamente diferente / mais eficiente de fazer isso?
*.htm
com$(find...)
- nomes de arquivos com espaços serão tratados corretamente no primeiro caso, mas não o segundo.$IFS
para$'\n'
para essa seção de código, em cujo caso os espaços não são um problema - as novas linhas ainda estão no entanto.Usando
{}
não é flexível o suficiente para algumas situações. Isso parece ser um desses.Uma solução possível seria
-exec
um script defind
, igual a:O arquivo de script deve ser semelhante a este, dependendo do exato
pandoc
linha de comando:Se você não quer criar e salvar um arquivo de script para isso, você sempre pode inline
bash
código de script:O adicional
-
no final serve para preencher$0
no bash, que geralmente inclui o nome do script de shell, argumentos posicionais a partir de$0
.Isso permite que você continue usando
find
(mesmo com-print0
exargs -0
se você estiver lidando com nomes de arquivos estranhos), mas não requer a criação de um arquivo separado.fonte
find
Lidar com nomes de arquivos estranhos por conta própria? IIRC nunca há uma boa razão para usarfind … -print0 | xargs -0 …
touch "$( echo -e 'foo\nbar' )" ; find . -name 'foo*bar' | xargs -n 1 echo File:
Você parece estar perdendo um
{}
no comando pandocMas então você terá arquivos nomeados
001.htm.md
- você terá que decidir se isso é um problema.fonte