findコマンドを使用して、マークダウンファイルをhtmlに変換します


17

拡張子がのハードディスク上にファイルがあるとします.md

これらすべてのファイルを.htmlスルーfindおよび-execオプションに変換したい。

マークダウンファイルをhtmlに変換するコマンドは

markdown readme.md > readme.html

私は次のようなものを使用しようとしています:

find / -name "*.md" -type f -exec markdown {} > {}.html \;

もちろん、上記は機能しません。だから、どうやってfindand だけを使ってそれを行うのexecですか?


回答:


16

次の>ようなシェルの特殊文字であるため、含むコンストラクトを引用符で囲む必要があります。

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

あなたがで終わるので、これはまた、ファイルの名前を変更しますfoo.html代わりにfoo.md.html

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

今file.md.htmlを取得しませんか?file.htmlの代わりに?
ベルンハルト

@rush {}両方のコマンドの最後になぜ必要なのですか?また、2番目のコマンドでは、何が起こったのかを追跡するのは難しいですか?私はその${0%.md}/.html部分を理解していませんでした。
Abhijeet Rastogi

ところで、私はチェックしました。おそらく間違ってスラッシュを書きました${0%.md}/.html
Abhijeet Rastogi

@shadyabhi final {}sh -c文字列の入力引数であり、としてアクセスされ$0ます。理解できないコマンドは、削除.mdして追加します.html。あなたはおそらくエスケープするのが正しいでしょう.
ベルンハルト

@Bernhardお返事ありがとうございます。正直なところ、私はそれがストリッピング.mdと追加であることも以前に知っていました.htmlが、それについてもっと知りたいです。これを説明するwiki / docにリダイレクトできますか?
Abhijeet Rastogi

0

あなたが書いたものを正確に達成する方法は、出力ファイルの名前を指定するmarkdown-oオプションを使用することです、すなわち

find / -name "*.md" -type f -exec markdown -o {}.html {} \;

このようにすることで、markdownを実行するためだけに新しいシェルを起動することを避けます。

残念ながら、ベルンハルトが指摘するように、この方法でこれを行うと、file.md.htmlではなくという名前のファイルが得られるfile.htmlため、ここではrushのアプローチがより適切です。


1
しかし、オプションmarkdownはありません-o。コメントする前に再確認しました。
Abhijeet Rastogi

markdown(1)はそう言っていますが、別のバージョンをお持ちですか?
ミケル

1
を使用することもできますpandoc -f markdown -t html -o...
ミケル

ああ、私はdaringfireball.net/projects/markdownを使用していましたが、それはありません。
Abhijeet Rastogi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.