Как мне написать команду пакетного процесса, используя параллельный GNU?

Я пытаюсь выполнить пакетную обработку с помощью пакета под названием ocrmypdf.

Вот команда, которая может обрабатывать 1 файл PDF

ocrmypdf input.pdf output.pdf

и вот команда, которая может обрабатывать все файлы PDF в каталоге, в котором мы ее запускаем.

parallel --tag -j 2 ocrmypdf '{}' 'output/{}' ::: *.pdf

Теперь я действительно хочу запустить эту команду для всех файлов PDF в каталоге. Здесь требуется еще один параметр.

ocrmypdf --sidecar txt/input.txt input.pdf out/output.pdf

Ранее я пробовал переписать параллельную команду следующим образом:

parallel --tag -j 2 ocrmypdf --sidecar txt/{}.txt {}.pdf out/{}.pdf ::: *.pdf

Но получаю ошибку:

ocrmypdf: error: the following arguments are required: output_pdf

Может кто-нибудь помочь мне понять, что я делаю не так? Спасибо!

2 ответа

Это работает для меня:

      parallel --tag -j 2 ocrmypdf --sidecar txt/{.}.txt {} out/{} ::: *.pdf

Если у вас не работает:

  • Определите неисправный файл
  • Запустите сбойный файл вручную, чтобы убедиться, что он работает.
  • Измените свой вопрос, включив ссылку на файл с ошибкой

(Также помните об этой ошибке при запуске нескольких тессерактов: https://github.com/tesseract-ocr/tesseract/issues/3109#issuecomment-703845274)

Пытаться:

      parallel --tag -j 2 ocrmypdf --sidecar txt/{.}.txt {} out/{} ::: *.pdf

Файлы .pdf после фигурных скобок являются посторонними и приведут к невозможности найти входные файлы, а для текстового - путем добавления точки внутри скобок, что автоматически удаляет расширение, поэтому вы получите .txt вместо файлов .pdf.txt (с теми же именами, что и входные)

ОБНОВЛЕНИЕ Нет, это тоже не совсем работает, у меня такая же ошибка, как и у вас. GNU p иногда может быть таким хитрым !!

Возможное решение

Я считаю, что это должно сработать. Чтобы избежать возни с кавычками, я сначала создал файл с именами всех pdf-файлов (полные относительные пути от cwd):

      ls --color=none *.pdf | parallel -q printf '%s'\\n {} > ocrmypdf.list

Затем я запустил параллельный ocrmypdf следующим образом:

      parallel -j 2 ocrmypdf --sidecar txt/{.} {} out/{} :::: ocrmypdf.list

У меня возникла ошибка, что в моем PDF-файле уже есть текст, но я думаю, что это сработало бы, если бы их еще не было. Каталоги txt и out уже должны были быть созданы. Обратите внимание на 4 вместо трех, потому что он читает из файла. По умолчанию будет использоваться один аргумент на строку, поэтому не беспокойтесь, если в именах файлов pdf есть пробелы и т. Д.

Другие вопросы по тегам