2017-01-15 4 views
1

Я хотел бы преобразовать все файлы .docx в каталог (и подкаталоги) в текстовые файлы из командной строки (так что я может использовать grep после этих файлов). Я нашел этотКомандная строка для преобразования всех .docx в каталог (и подкаталоги) в текстовый файл и запись новых файлов

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. И я хотел бы, чтобы сценарий сделал это рекурсивно.

У меня есть это, используя antword, которые делают то, что я хочу для файлов .doc, но это не работает для .docx-файлов.

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

Я попытался смешать оба, но безуспешно ... Была бы оценена командная строка, которая будет работать в одно и то же время!

Спасибо

ответ

1

Следующий сценарий ..

  • преобразует все DOCX файлов в каталоге, где вы запустите его, рекурсивно (адаптировать . в find . к вашей желаем отправной точки)
  • пишет txt, где он нашел файл docx

Bash script:

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" . 
+0

Спасибо. Похоже, что он не работает рекурсивно. И вместо создания нового каталога мне бы хотелось записать файл в каталог, где он нашел файл .docx. Любая настройка? – jejuba

+0

@jejuba изменил скрипт так, чтобы он начинался с текущего каталога. Он * работает * рекурсивно (также старая версия). Изменил его так, чтобы он хранил txt, где он нашел docx. Также grep немного сложнее, так как вам тоже нужно рекурсивно. – hansaplast

+0

OK, спасибо, что он работает хорошо. Проблема в том, что у меня есть файлы .docx, которые не являются действительно файлами .docx. Я должен разобраться в этом. Большое спасибо. – jejuba

1

Вы можете использовать pandoc для преобразования файлов DOCX. Он не поддерживает файлы .doc, поэтому вам понадобятся как pandoc, так и antiword.

Повторное использование вашей while цикл:

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

спасибо. Я попытался использовать pandoc, но для некоторых reaons он создает пустые .txt-файлы со следующим предупреждением: pandoc: Unkown reader: docx. Есть идеи? Но цикл хорош: он рекурсивный и создает файл, где он был. – jejuba

+0

Поддержка docx была добавлена ​​в версию [1.13] (https://github.com/jgm/pandoc/releases/tag/1.13). Какую версию вы используете? Возможно, вам понадобится [установить последнюю версию] (http://pandoc.org/installing.html). –

+0

Правильно, у меня есть версия 1.12 ...Это тот, который доступен со стабильной версией Debian. Я должен посмотреть, смогу ли я установить его из тестирования. Лучший, – jejuba

Смежные вопросы