私のハードドライブに拡張機能があるとしましょう.md
。
.html
これらのファイルをすべてスルーfind
とオプションに変換したいと思います-exec
。
Markdownファイルをhtmlに変換するコマンドは次のとおりです。
markdown readme.md > readme.html
私は次のようなものを使用しようとしています:
find / -name "*.md" -type f -exec markdown {} > {}.html \;
もちろん上記の方法は通じません。それではfind
、andだけを使用してこれをどのように実行できますかexec
?
答え1
>
含まれる構文は次のようにシェル特殊文字であるため、引用符で囲む必要があります。
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"' {} \;
答え2
作成した内容を正確に達成する方法は、出力ファイルの名前を指定するmarkdown
オプションを使用することです。-o
find / -name "*.md" -type f -exec markdown -o {}.html {} \;
これにより、マークダウンを実行するために新しいシェルを起動することを回避できます。
残念ながら、Bernhardが指摘したように、これを行うと代わりにfile.md.html
名前付きファイルが提供されるため、file.html
ここでは緊急のアプローチがより適しています。