命令行将目录(和子目录)中的所有.docx转换为文本文件并写入新文件

时间:2017-01-15 05:58:44

标签: grep unzip doc

我想将目录(和子目录)中的所有.docx文件从命令行转换为文本文件(因此我可以在这些文件后使用grep)。我发现了这个

unzip -p tutu.docx word/document.xml | sed -e 's/<\/w:p>/\n/g; s/<[^>]\{1,\}>//g; s/[^[:print:]\n]\{1,\}//g'

here效果很好,但它会在终端中发送文件。我想将新文本文件(例如.txt)写在与.docx文件相同的目录中。我想要一个脚本来递归地执行此操作。

我有这个,使用反义词,做我想要的.doc文件,但它不适用于.docx文件。

find . -name '*.doc' | while read i; do antiword -i 1 "${i}" >"${i/doc/txt}"; done

我尝试将两者混合但没有成功......同时执行这两项操作的命令行将不胜感激!

谢谢

2 个答案:

答案 0 :(得分:2)

您可以使用pandoc转换docx文件。它不支持.doc个文件,因此您需要pandoc和antiword。

重用while循环:

find . -name '*.docx' | while read i; do pandoc --from docx --to plain "${i}" >"${i/docx/txt}"; done

答案 1 :(得分:1)

以下脚本..

  • 以递归方式转换您运行它的目录中的所有docx文件(将.中的find .调整到您希望的起点)
  • 将txt文件写入找到docx文件
  • 的位置

Bash脚本:

find . -name "*.docx" | while read file; do
    unzip -p $file word/document.xml |
        sed -e 's/<[^>]\{1,\}>//g; s/[^[:print:]]\{1,\}//g' > "${file/docx/txt}"
done

之后你可以像这样运行grep:

grep -r "some text" --include "*.txt" .