
내 폴더에 pandoc을 사용하여 html로 변환하고 싶은 마크다운 파일이 많이 있습니다.
내가 일반적으로 사용하는 명령은
pandoc Atten.md -f markdown -t html --css pandoc.css -o Atten.html
Atten.md
일반적인 마크다운 파일의 이름은 어디에 있습니까? 그러나 위에서 수행한 대로 모든 파일을 반복하고 .md를 .html로 변환하고 싶습니다. Bash나 zsh에서는 어떻게 하나요?
답변1
와 함께 find
:
find path/to/dir -name "*.md" -type f -exec sh -c '
pandoc -f markdown -t html --css pandoc.css -o "${1%.*}.html" "$1"
' find-sh {} \;
Bash, Zsh 및 기타 여러 쉘에서 작동합니다. 외부 쉘의 유일한 작업은 find
적절한 인수를 사용하여 실행하는 것입니다.
이 버전은 sh
가능한 한 많은 파일을 처리하기 위해 단일 파일을 생성합니다( sh
필요한 경우 더 많은 프로세스가 생성됩니다).
find path/to/dir -name "*.md" -type f -exec sh -c '
for f; do
pandoc -f markdown -t html --css pandoc.css -o "${f%.*}.html" "$f"
done
' find-sh {} +
노트:
- 내부 셸은 이전 확장을 제거해야 하기 때문에 호출됩니다. 요구 사항이 아닌 경우 솔루션이
… -exec pandoc … -o {}.html {} \;
작동할 것입니다. POSIX는find
밑창 하나를 교체 해야 하기 때문에 "아마도"입니다{}
.find
더 많은 것이 대체되는 경우(예:{}.html
또는 의 두 번째 모양 ) 사용하는 구현 의 "의례"입니다{}
. -execdir
대신-exec
더 좋을 것이지만 POSIX는 아닙니다.-execdir
옵션으로 해석되는 것을 방지하기 위해./"$1"
대신"$1"
(각각:./"$f"
대신 ) 을 사용할 수 있습니다 . 또 다른 접근법은"$f"
pandoc
--
하지만 지원하는지는 모르겠습니다pandoc
. 귀하의 경우에는 로 시작해야 하기 때문에 로"$1"
시작하는 것으로 확장할 수 없다고 생각합니다 . 로 시작 하면 애초에 로 잘못 해석될 것입니다 . 일반적으로 이러한 우려는 타당합니다.-
path/to/dir
path/to/dir
-
find
호출 에서
pandoc
나는 가장 일반적인 순서를 선호하기 때문에 피연산자를 끝으로 옮겼습니다command -options operands
.해결책은 재귀적입니다. 비재귀적으로 만들려면
-maxdepth 1
. 지원find
하지 않으면-maxdepth
공부하십시오이것또는 삭제find
하고 외부 셸이 파일을 반복하도록 합니다.# written for Bash ( cd path/to/dir || exit 125 for f in ./*.md ./.*.md; do [ -f "$f" ] && pandoc -f markdown -t html --css pandoc.css -o "${f%.*}.html" "$f" done )
위 코드와 관련된 참고사항:
- 서브쉘은
cd
현재 쉘에 영향을 주지 않고 작동하기 위한 것입니다. cd
어떤 이유로든 실패 하면 나머지는 실행되지 않습니다. 이는 좋은 습관입니다../*.md
대신 일반은 나중에 옵션으로 해석되는 것을*.md
방지합니다 ."$f"
./.*.md
./*.md
도트 파일과 일치하지 않기 때문에 추가되었습니다 .[ -f "$f" ]
예방하는 것입니다pandoc
디렉토리, 특수 파일 등을 호출합니다 .- 패턴과 일치하는 것이 없을 때
pandoc
존재하지 않는./*.md
(또는 )을 호출합니다 ../.*.md
Zsh는 다소 다릅니다. 그래도 코드는 작동해야 하며 어쨌든 서브쉘이 유용하기 때문에 정상적인 쉘에서 명시적으로
sh
호출해도 큰 차이는 없습니다 .sh
sh -c 'cd path/to/dir || exit 125 for … done '
- 서브쉘은
답변2
find
당신은 다음을 사용해야합니다 -exec
(참조남자 찾기):
find YourDirectory -name \*.md | \
while IFS= read fn; do \
pandoc ${fn} -f markdown -t html --css pandoc.css -o ${fn%.md}.html ; done
아니면 -execdir
…
답변3
다음을 사용하여 파일을 반복할 수 있습니다.
for item in *.md; do CONVERT_FILE_COMMAND $item "$(basename '$item' .md).html; done