space 包含 bash for 循环中的项目
space containing items in bash for-loop
我想将./src/
下的所有markdown文件递归转换为html:
#!/bin/bash
function do_recursive_pandoc {
local markdown_src_file_extension=\*.markdown
local markdown_src_path=""
local html_output_path=""
mkdir "$html_output_path" 2>/dev/null
for i in $(find $markdown_src_path -name $markdown_src_file_extension 2>/dev/null | cut --delimiter='/' --fields=2- )
do
mkdir "$html_output_path"/$(dirname "$i") 2>/dev/null
pandoc -rmarkdown -whtml "$markdown_src_path"/"$i" --output="$html_output_path"/"$i".html
done
}
do_recursive_pandoc "src" "output"
但是如果我在文件路径或名称中有 space bash 将在 for
循环中将它们计为多个项目,例如如果我有:
./src/dir 1/foo.markdown
此脚本将生成 ./output/1
目录而不是生成 ./output/dir 1/
并尝试转换 ./src/dir
和 ./src/1/foo.markdown
而不是 ./src/dir 1/foo.markdown
我该如何解决?
你最好像这样将 find 管道输送到:
find $markdown_src_path -name $markdown_src_file_extension 2>/dev/null | cut --delimiter='/' --fields=2- | while read i; do
这将完成工作:
#!/bin/bash
#############################################################################
function do_recursive_pandoc {
local src_path=$(realpath "")
local output_path=$(realpath "") && mkdir --parents "$output_path" 2>/dev/null
find "$src_path" -name "*.markdown" -not -path "$output_path" -exec bash -c '
i=
o="""${1#}"
mkdir --parents "$(dirname "$o")" 2>/dev/null
if [ -f "$i" ]; then pandoc -rmarkdown -whtml "$i" --output="$o".html ; fi
' " " {} $src_path $output_path \;
}
#############################################################################
do_recursive_pandoc "src" "output"
#############################################################################
我将其与基本 CSS 一起粘贴到 Gist。
我想将./src/
下的所有markdown文件递归转换为html:
#!/bin/bash
function do_recursive_pandoc {
local markdown_src_file_extension=\*.markdown
local markdown_src_path=""
local html_output_path=""
mkdir "$html_output_path" 2>/dev/null
for i in $(find $markdown_src_path -name $markdown_src_file_extension 2>/dev/null | cut --delimiter='/' --fields=2- )
do
mkdir "$html_output_path"/$(dirname "$i") 2>/dev/null
pandoc -rmarkdown -whtml "$markdown_src_path"/"$i" --output="$html_output_path"/"$i".html
done
}
do_recursive_pandoc "src" "output"
但是如果我在文件路径或名称中有 space bash 将在 for
循环中将它们计为多个项目,例如如果我有:
./src/dir 1/foo.markdown
此脚本将生成 ./output/1
目录而不是生成 ./output/dir 1/
并尝试转换 ./src/dir
和 ./src/1/foo.markdown
而不是 ./src/dir 1/foo.markdown
我该如何解决?
你最好像这样将 find 管道输送到:
find $markdown_src_path -name $markdown_src_file_extension 2>/dev/null | cut --delimiter='/' --fields=2- | while read i; do
这将完成工作:
#!/bin/bash
#############################################################################
function do_recursive_pandoc {
local src_path=$(realpath "")
local output_path=$(realpath "") && mkdir --parents "$output_path" 2>/dev/null
find "$src_path" -name "*.markdown" -not -path "$output_path" -exec bash -c '
i=
o="""${1#}"
mkdir --parents "$(dirname "$o")" 2>/dev/null
if [ -f "$i" ]; then pandoc -rmarkdown -whtml "$i" --output="$o".html ; fi
' " " {} $src_path $output_path \;
}
#############################################################################
do_recursive_pandoc "src" "output"
#############################################################################
我将其与基本 CSS 一起粘贴到 Gist。