Como mesclar esses comandos em um?

3

Isso é o que eu quero fazer:

Converta uma pasta de arquivos HTML em markdown, copiando também os metadados xml de cada um dos arquivos HTML convertendo-os em YAML.

Eu fiz pesquisas e me deparei com os seguintes comandos:

  1. find . -name \*.md -type f -exec pandoc -o {}.txt {} \;

  2. find / -name "*.md" -type f -exec sh -c 'markdown "${0}" > "${0%.md}.html"' {} \;

  3. pandoc -f html -t markdown -s input.html -o output.md

    • Isso foi encontrado aqui. Este é o comando pandoc que aparentemente copia os metadados e os transforma em YAML, no entanto, ele não funciona em uma pasta de arquivos, apenas em aberto

O que eu preciso é ter um único comando que use pandoc, dá aos arquivos convertidos o ".md". extensão e não .html.md, e converte os metadados xml em YAML. Tudo isso pode ser alcançado usando esses três comandos, eles só precisam ser mesclados em um único comando.

    
por st john smith 14.03.2015 / 04:35

1 resposta

1

O que você precisa é xargs. Eu não estou familiarizado com o pandoc, mas algo assim deveria funcionar:

$ find . -name \*.html -type f | sed 's/\.html$//' | xargs -I {} pandoc -f html -t markdown -s -o "{}.md" "{}.html"

Isso usa 'find' para listar todos os arquivos .html no diretório escolhido (e em quaisquer subdiretórios). Estes são canalizados para sed que retira a extensão '.html' e depois canaliza para xargs que os alimenta um a um em pandoc; pandoc (se eu usei a sintaxe corretamente), em seguida, leva cada nome (substituido por {}), usa cada arquivo html como fonte e saídas para um novo arquivo com extensão md no mesmo diretório que o arquivo de origem.

Você deve terminar com seus arquivos html originais e um número igual de arquivos md correspondentes no mesmo diretório.

    
por 14.03.2015 / 14:33