これらのコマンドを1つにまとめるにはどうすればよいですか?

これらのコマンドを1つにまとめるにはどうすればよいですか?

これが私がしたいことです:

HTMLファイルフォルダをMarkdownに変換し、YAMLに変換して各HTMLファイルのXMLメタデータをコピーします。

調査した結果、次のコマンドが見つかりました。

  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

    • これはここで見つかります。以下は、明らかにメタデータをコピーしてYAMLに変換するpandocコマンドです。ただし、ファイルフォルダでは開いたときにのみ機能しません。

私にとって必要なのは、変換されたファイルに「.md」を提供するpandocを使用するコマンドです。 .html.mdの代わりに拡張子を使用し、XMLメタデータをYAMLに変換します。これらすべては、これら3つのコマンドを使用して実行できます。これを1つのコマンドにまとめるだけです。

答え1

必要なのはxargsです。私はpandocに慣れていませんが、次のように動作するはずです。

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

検索を使用して、選択したディレクトリ(およびすべてのサブディレクトリ)にあるすべての.htmlファイルを一覧表示します。これらはsedにパイプされて ".html"拡張子を削除し、xargsにパイプしてそれをpandocに1つずつ供給し(構文を正しく使用する場合)、各名前を取得します({}に置き換えられます)。 )、各htmlファイルをソースとして使用し、ソースファイルと同じディレクトリに拡張子がmdの新しいファイルとして出力されます。

最終的には、元のhtmlファイルと同じ数の一致するmdファイルが同じディレクトリに存在する必要があります。

答え2

HTMLファイルフォルダをMarkdownに変換し、YAMLに変換して各HTMLファイルのXMLメタデータをコピーします。

これを使用してfindプロセスを駆動できます。コマンドを作成する方法は次のとおりです。

  1. これにより、シェルパターンと一致する一連のファイルが作成されます*.html

    find . -type f -name '*.html'
    
  2. これにより、HTMLファイルがMarkdownに変換されます。

    pandoc -f html -t markdown -s input.html -o output.md
    
  3. 一致するファイルごとに、およびをpandoc置き換えてコマンドを繰り返す必要があります。以下を使用してファイル名の置換を処理します。input.htmloutput.mdsh

    find . -type f -name '*.html' -exec sh -c 'pandoc -f html -t markdown -s "$1" -o "${1%html}md"' _ {} \;
    
  4. 一致するファイルの各インスタンスを起動することは比較的高価であるため、sh複数のファイルを同時に処理するようにします。

    find . -type f -name '*.html' -exec sh -c 'for h in "$@"; do m="${h%html}md"; pandoc -f html -t markdown -s "$h" -o "$m"; done' _ {} +
    

私はYAMLを生成するコマンドを提供していないようで、ソリューションには含まれていません。しかし、生成されたMarkdownと一緒に別々のファイルであれば、シェルループにコマンドを挿入するのはとても簡単です。

答え3

多くの人にとって、xargsこれを使用してfind出力を処理することが完全に理解されていないように見えるかもしれません。while readすべてのファイルを繰り返すには、-loopを使用すると理解しやすくなりますか?

探す。 - 名前 "*.html" - 行を読むとき f |
    pandoc "${ライン}"\
           -fhtml\
           -t 値下げ\
           -S \
           -o "${line%%.html}.md"
    完璧

スペースを含むファイルを隠すためにも引用符が使用されます。この構造${line%%.html}は「Bashistic」であり、他のシェルでは機能しない可能性があります。それは何でも削除します.html- ファイル名のサフィックスです。

関連情報