以递归方式在目录中的每个文件上运行脚本,并将每个输出传递给新文件

时间:2012-05-16 14:34:52

标签: recursion find markdown

我正在尝试使用原生.markdown脚本将~/notes/(及以下)中的每个Markdown.pl --html4tags文件转换为html。但是,Markdown.pl会将html打印到stout,这意味着要将test.markdown转换为test.html,我需要运行:Markdown.pl --html4tags test.markdown > test.html

我一直在搞清楚如何将管道合并到递归find -execfind ... | xargs函数中。我提出的最好的是:

for i in `find ~/notes/ -type f -name "*.markdown"` ; do
  Markdown.pl --html4tags $i > ${i}.html ;
done

它成功地将每个.markdown文件转换为html,但当然看起来像test.markdown.html而不是test.html

基本上,我需要做一些事情,比如将${i}.markdown转换为${i}.html,但我无法弄清楚如何在函数中对其进行编码。谢谢你的帮助。

编辑我找到了一种方法来修复上述脚本,使用basename(我刚刚发现):

for i in `find ~/notes/ -type f -name "*.markdown"` ; do
  Markdown.pl --html4tags $i > `basename $i .markdown`.html ;
done

这基本上将每个.markdown文件转换为html,同时还剥离.markdown扩展名,然后添加.html扩展名。

我很想知道是否有更好的方法可以做到这一点,例如使用find -exec

1 个答案:

答案 0 :(得分:1)

轰!

find ~/notes/ -name '*.markdown' | while read line
do
    Markdown.pl --html4tags $line > ${line/.markdown/.html}
done