查找扩展名为.md的所有文件,并使用该文件执行命令,并生成一个新文件,其中包含通过md文件名生成的名称

时间:2018-03-29 10:05:39

标签: html linux shell sh markdown

我正在尝试编写一个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。尝试了不同的解决方案,但没有工作

3 个答案:

答案 0 :(得分:1)

嗨,你必须在这里写一个小脚本,我已经说明了它是如何工作的,请参考下面代码中的注释: -

  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
    
  2. 为您的脚本文件提供执行权限,如下所示: -

    chmod 777 convertTohtml.sh
    
  3. 现在执行文件: -

    ./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