find,sed与xargs:批量文件操作

#任务说明

  • 批量重命名文件
  • 批量将markdown文件转化为html

#安装pandoc

##pandoc简介
Pandoc是由John MacFarlane开发的标记语言转换工具,该工具使用Haskell开发。

这里主要利用Pandoc将markdown转换为html。

##安装步骤

1
2
3
sudo apt-get install cabal-install
cabal update
cabal install pandoc

cabal是haskell的包管理工具

然后在环境变量PATH中添加cabal的bin目录

1
gedit ~/.zshrc

在末尾添加

1
export PATH=/home/<your username>/.cabal/bin:$PATH

##其他说明
如果之前使用apt-get安装pandoc失败
可以使用以下命令卸载

1
sudo apt-get autoremove pandoc

不过在输入Y前,请仔细确认要删除的包。

#批量重命名文件

1
2
find . -name '*.markdown' | xargs -i echo {} {} | sed 's/.markdown/.md/2' | xargs -n 2 echo //调试使用
find . -name '*.markdown' | xargs -i echo {} {} | sed 's/.markdown/.md/2' | xargs -n 2 mv

  1. 首先利用find命令递归找到当前目录下所有后缀名为.markdown的文件。
  2. xargs -i 将find找到内容一行一行赋值给{}
    这样我们就构造了类似如下的两列

    1
    2
    3
    a.markdown a.markdown
    b.markdown b.markdown
    c.markdown c.markdown
  3. 利用sed将第二列的.markdown替换为.md
    's/.markdown/.md/2'
    基础的形式为
    's/oldname/newname/'
    s表示是替换操作
    用newname的内容替换oldname
    newname和oldname可以是正则表达式
    最后的2表示仅对第2列操作
    经过第三步我们构造了如下内容

    1
    2
    3
    a.markdown a.md
    b.markdown b.md
    c.markdown c.md
  4. xargs -n 2 表示每次命令的调用需要两个参数
    最终的执行相当于

    1
    2
    3
    mv a.markdown a.md
    mv b.markdown b.md
    mv c.markdown c.md

#批量将markdown文件转换为html

1
2
find . -name '*.md' |sed -e 's/\(.*\).md$/pandoc & -o \1.html/g' //调试使用
find . -name '*.md' |sed -e 's/\(.*\).md$/pandoc & -o \1.html/e'

在这里直接利用sed构造了最终的命令
&代表原先行的字符串
最后的e则是按每行执行

最终构造的结果是

1
2
3
pandoc a.md -o a.html
pandoc b.md -o b.html
pandoc c.md -o c.html

#参考资料

##pandoc
[1] http://www.360doc.com/content/13/0319/22/11644963_272572233.shtml
[2] http://blog.csdn.net/duqi_yc/article/details/8974041
[3] http://blog.csdn.net/duqi_yc/article/details/8962828
[4] http://yanping.me/cn/blog/2012/03/13/pandoc/

##find
[1] http://www.cnblogs.com/peida/archive/2012/11/16/2773289.html

##sed
[1] http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html
[2] SED & AWK 董伟明

##xargs
[1] http://blog.csdn.net/zhangfn2011/article/details/6776925
[2] http://czmmiao.iteye.com/blog/1949225