스캔 프로세스를 단순화하기 위해 한 단계로 OCR을 스캔하고 적용할 수 있는 스크립트를 생성하겠습니다. 그러나 내 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