LINUX.ORG.RU
решено ФорумAdmin

пакетная конвертация doc to pdf

 , ,


1

1

всем привет
имеются куча файлов в куче каталогов и подкаталогов в формате doc. их необходимо конвертировать в формат pdf

find "/home/man8531/conv/" -iname "*.*" -exec soffice --headless --convert-to pdf:writer_pdf_Export --outdir "/home/man8531/test" {} \;
с помощью find и libreoffice удаётся получить желаемый результат, но: конвертированные файлы складываются в указанный каталог --outdir «/home/man8531/test» без сохранения дерева каталогов. как заставить конвертировать файлы с сохранением дерева каталогов или в тот же каталог, где находится исходный файл?

Где -type f?

Почему -iname "*.*", а не -iname '*.doc'?

без сохранения дерева каталогов

Так захотели в libreoffice.

как заставить конвертировать файлы с сохранением дерева каталогов

Придётся немного извратиться:

#!/bin/sh
IFS=$'\n'
for file in $(find "${HOME}/conv/" -iname '*.doc' -type f -print)"; do
  dir="$(dirname -- "${file}" | sed 's,/conv/,/test/,')"
  mkdir -p "${dir}"
  soffice --headless --convert-to pdf:writer_pdf_Export --outdir "${dir}" "${file}"
done

или в тот же каталог, где находится исходный файл

Задача чуть проще:

#!/bin/sh
IFS=$'\n'
for file in $(find "${HOME}/conv/" -iname '*.doc' -type f -print)"; do
  dir="$(dirname -- "${file}")"
  soffice --headless --convert-to pdf:writer_pdf_Export --outdir "${dir}" "${file}"
done
mord0d ★★★★★
()
Ответ на: комментарий от mord0d

Где -type f? Почему -iname «*.*», а не -iname '*.doc'?

потому как может быть и .docx формат, отсюда и «*.*». и это же подразумевает, что искать нужно только файлы. завтра попробую, спасибо

man8531
() автор топика
tree 1/
1/
├── 2
│   └── test1.odt
├── 3
│   └── test2.odt
└── long name dir with spaces
    └── test with spaces.odt

find 1/ -type f -iname '*.odt' | while read filepath; do /usr/bin/soffice --convert-to pdf --headless --outdir "${filepath%/*}" "$filepath"; done

tree 1
1
├── 2
│   ├── test1.odt
│   └── test1.pdf
├── 3
│   ├── test2.odt
│   └── test2.pdf
└── long name dir with spaces
    ├── test with spaces.odt
    └── test with spaces.pdf
PawsOnFire
()
Ответ на: комментарий от man8531

потому как может быть и .docx формат

\( -iname '*.docx' -or -iname '*.doc' \)

и это же подразумевает, что искать нужно только файлы

find не в курсе, что ты подразумеваешь, он не умеет читать мысли и творить магию. Будет дира someshit.doc — скормит её офису не задумываясь, ибо задумываться не умеет. А по маске *.* вообще любую диру, содержащую точку. И любой файл, в том числе не поддерживаемый офисом.
Делай нормально сразу, и не огребёшь в будущем.

mord0d ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.