ディレクトリ全体をhtmlからマークダウンに変換しようとしています。ディレクトリツリーは非常に高いため、2レベルと3レベル下にネストされたファイルがあります。
この質問 に答える際に、JohnMacFarlaneは次のMakefile
を使用することを提案しました。
TXTDIR=sources
HTMLS=$(wildcard *.html)
MDS=$(patsubst %.html,$(TXTDIR)/%.markdown, $(HTMLS))
.PHONY : all
all : $(MDS)
$(TXTDIR) :
mkdir $(TXTDIR)
$(TXTDIR)/%.markdown : %.html $(TXTDIR)
pandoc -f html -t markdown -s $< -o $@
さて、これはサブディレクトリ内には入らないようです。ツリー全体を処理するようにこれを変更する簡単な方法はありますか?
これをmake
に入れる必要はありません。私が探しているのは、各html
ファイルがそのファイルで実行中のpandoc
の出力に置き換えられる初期ディレクトリのミラーを取得する方法です。
(私は これらの行 に沿って何かが役立つと思いますが、私が自分でそれをやろうとしても物事を壊さないという自信はありません。私はそれに関しては文盲です。 GNU make
)。)
make
を使用してもかまわないnotとおっしゃっていたので、bash
を試すことができます。
私はこれからコードを変更しました answer 、親ディレクトリで使用します:
find ./ -iname "*.md" -type f -exec sh -c 'pandoc "${0}" -o "${0%.md}.pdf"' {} \;
私がテストしたときに機能したので、あなたのために機能するはずです。
リクエストに応じて出力フォルダを指定する方法はありますか?(元のファイルとしてhtml
を使用し、md
出力として):
find ./ -iname "*.html" -type f -exec sh -c 'pandoc "${0}" -o "./output/$(basename ${0%.html}.md)"' {} \;
私はこれをテストしました、そしてそれは私のために働きます。
編集:コメントによると、find
および{} \;
オプションと一緒に使用すると-exec
が使用されます多かれ少なかれ、ファイル名があるべき場所のプレースホルダーとして。そのように、コマンドに配置されていることがわかったファイル名を展開します。 \;
は-exec
を終了します。詳細については、 ここ を参照してください。
これが私がやった方法です!
files=($(find ${INPUT_FOLDER} -type f -name '*.md'))
for item in ${files[*]}
do
printf " %s\n" $item
install -d ${DIR}/build/$item
pandoc $item -f markdown -t html -o ${DIR}/build/$item.html;
rm -Rf ${DIR}/build/$item
done