スキャンプロセスを簡素化するために、OCRを1ステップでスキャンして適用できるスクリプトを作成します。しかし、私のbash技術は非常に悪いので、助けてくれて本当にありがとう。私の試みは次のとおりです。
#!/bin/bash
mydate="$(date +"%Y%m%d-%H%M%S")"
image="$(scanimage --device "brother4:net1;dev0" --progress --verbose --resolution=600 -l 0 -t 0 -x 210 -y 297 --format=pdf)"
ocrmypdf --deskew "$image" "$mydate".pdf
このコマンドは、日付別のファイル名を作成しなくてもうまく機能します。
scanimage --device "brother4:net1;dev0" --progress --verbose --resolution=600 -l 0 -t 0 -x 210 -y 297 --format=pdf > scan.pdf && ocrmypdf --deskew scan.pdf scan.pdf
OCR処理には時間がかかりますので、スキャン時に時間(最大秒)を含むファイル名を保存してから、最終ファイルに適用する必要があります。あるいはocrmypdf
、名前を指定せずにファイルをパイプし、日付と時刻の情報を含むファイルを保存することもできます。
答え1
一時ディレクトリを作成し、ここにファイルを保存できます。mktemp
一意のファイル/ディレクトリ名を提供するように設計されており、この目的に適しています。
tmpdir=$(mktemp -d OcrTmpDirXXXXXXXXX)
scanimage args >"$tmpdir/in.pdf"
ocrmypdf args "$tmpdir/in.pdf" "$tmpdir/out.pdf"
printf 'See "%s" for result\n' "$tmpdir"
答え2
問題は
image="$(scanimage --device "brother4:net1;dev0" --progress --verbose --resolution=600 -l 0 -t 0 -x 210 -y 297 --format=pdf)"
$image
変数には次のものが含まれています。バイナリコンテンツファイル名ではなくPDF名です。
非常にトリッキーな方法は次のとおりです。プロセスの交換
ocrmypdf --deskew <(
scanimage --device "brother4:net1;dev0" --progress --verbose --resolution=600 -l 0 -t 0 -x 210 -y 297 --format=pdf
) "$mydate".pdf
私はocrmypdfがそれを受け入れることを保証しません。
ocrmypdfが-
「標準入力」を表すファイル名を受け入れる場合は、次のことができます。
scanimage --device "brother4:net1;dev0" --progress --verbose --resolution=600 -l 0 -t 0 -x 210 -y 297 --format=pdf \
| ocrmypdf --deskew - "$mydate".pdf
あるいは、二重ハイフンが必要な場合があります。このツールがどのように機能するかわかりません(マンページを確認)。
... \
| ocrmypdf --deskew -- - "$mydate".pdf