2

Я пытаюсь использовать tesseract и hocr2pdf для ряда файлов .tif в папке.

Использование ls *.tif | xargs -I% tesseract % % -l fra hocr создает html-файлы с тем же именем, но с добавлением .html. Но ls *.tif |xargs -I% hocr2pdf -i % -n -o %.pdf < %.html не работает. Я получаю сообщение об ошибке %.html not found . Кажется, у xargs есть проблемы с < в команде hocr2pdf.

Как мне обойти это?

3 ответа3

3

Прежде всего, никогда не анализируйте вывод ls.

Причина, по которой он не работает, заключается в том, что xargs не видит %.html , bash - видит. < Считается концом команды xargs , поэтому заданная подстановка (-I%) больше не работает. Лучшим способом сделать то, что вы хотите, было бы что-то вроде этого:

find . -maxdepth 1 -name "*.tif" -print0 | while IFS= read -r -d '' n; do 
    tesseract "$n" "$n" -l fra hocr &&
    hocr2pdf -i "$n.html" -n -o "$n.pdf"
done 
3

xargs не идеален для этой задачи. Вам нужна оболочка для перенаправления.

Одним из вариантов будет вызов bash из xargs, но гораздо проще использовать цикл for:

for f in ./*.tif; do
    tesseract "$f" "$f" -l fra hocr
    hocr2pdf -i "$f" -n -o "$f.pdf" < "$f.html"
done
0

С помощью GNU Parallel вы можете получить параллелизацию обработки:

parallel "tesseract {} {} -l fra hocr; hocr2pdf -i {} -n -o {}.pdf < {}.html" ::: *.tif

Установка GNU Parallel занимает буквально 10 секунд:

wget pi.dk/3 -qO - | sh -x

Посмотрите вступительные видео, чтобы узнать больше: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .