我正在尝试编写一个shell脚本,以递归方式查找扩展名为.md的目录下的所有文件,并使用.md文件执行命令,并生成具有相同名称但扩展名不同的新文件。
下面是我正在使用的命令,但它实际上将.html附加到文件而不是用.html替换.md
找到。 -name'* .md'-exec markdown-html {} -s resources / styles / common-custom.css -o {} .html \;
上面的命令从“home.md”生成一个新文件“home.md.html”,但我想删除.md。尝试了不同的解决方案,但没有工作
答案 0 :(得分:1)
嗨,你必须在这里写一个小脚本,我已经说明了它是如何工作的,请参考下面代码中的注释: -
首先创建一个像convertTohtml.sh
这样的shell脚本文件,并在其中添加以下代码
#!/bin/bash
find . -name '*.md' > filelist.dat
# list down all the file in a temp file
while read file
do
html_file=$( echo "$file" | sed -e 's/\.md//g')
# the above command will store 'home.md' as 'home' to variable 'html_file'
#hence '$html_file.html' equal to 'home.html'
markdown-html $file -s resources/styles/common-custom.css -o $html_file.html
done < filelist.dat
# with while loop read each line from the file. Here each line is a locatin of .md file
rm filelist.dat
#delete the temporary file finally
为您的脚本文件提供执行权限,如下所示: -
chmod 777 convertTohtml.sh
现在执行文件: -
./convertTohtml.sh
答案 1 :(得分:0)
如果你想多次使用find的输出,你可以尝试这样的事情:
find . -name "*.md" -exec sh -c "echo {} && touch {}.foo" \;
请注意:
sh -c "echo {} && touch {}.foo"
sh -c
将运行从字符串中读取的命令,然后{}
将替换为find输出,在此示例中首先执行echo {}
并且如果成功&&
touch {}.foo
然后它会find . -name "*.md" -exec sh -c "markdown-html {} -s resources/styles/common-custom.css -o {}.html" \;
,在你的情况下,这可能就像:
{{1}}
答案 2 :(得分:0)
下面的脚本将解决扩展问题。
#!/bin/bash
find . -name '*.md' > filelist.dat
# list down all the file in a temp file
while read file
do
file=`echo ${file%.md}`
#get the filename witout extension
markdown-html $file -s resources/styles/common-custom.css -o $file.html
done < filelist.dat
# with while loop read each line from the file. Here each line is a locatin of .md file
rm filelist.dat
#delete the temporary file finally