是否可以使用gnu parallel
的一個實例同時有兩個輸入文件類型?在GNU並行中同時輸入兩個文件類型?
此長命令:
find . -name \*.pdf | parallel -j 4 --progress --eta 'mkdir -p {.} && gs -dQUIET -dINTERPOLATE -dSAFER -dBATCH -dNOPAUSE -dPDFSETTINGS=/ebook -dNumRenderingThreads=4 -sDEVICE=pgmraw -r300 -dTextAlphaBits=4 -sProcessColorModel=DeviceGray -sColorConversionStrategy=Gray -dOverrideICC -o {.}/{.}-%03d.pgm {}' && time find . -name \*.pgm | parallel -j 4 --progress --eta 'tesseract {} {.} -l deu_frak && rm {.}.pgm'
一個)
- 創建用於讀取每個PDF文件夾(第1輸入文件類型)
- 與
Ghostscript
轉換PDF到PGM圖像 - 將它們移動到相應的文件夾中
- 然後它將使用tesseract執行每個pgm上的OCR(第二輸入文件類型)
- 之後它將文本文件保存在各個文件夾中
- 最後刪除所有的pgm圖像文件。
但是,上述命令實際上由兩個命令組成,它們與&&
相結合,將上述例程分成兩個獨立的部分。其結果是,它會:
B)
- 轉換首先PDF轉換PGM圖像文件(吃了大量的磁盤 空間)
- 之前,它將與OCR和啓動隨後清除當時不需要的pgm圖像文件。
這是不受歡迎的,因爲它會在命令的第二部分執行之前吃掉我的所有磁盤空間!
是有可能這兩個命令結合一體,使parallel
會經歷的整個過程)的前四個PDF文件(如parallel
做4個作業的同時-j 4
),纔去未來四年pdf文件?
然而,似乎有點像下面的小例子,是不可能的parallel
:
parallel -j 4 --progress --eta 'mkdir -p {.} && gs -sDEVICE=pgmraw -r300 -o {.}/{.}-%03d.pgm {}' && tesseract {} {.} -l deu_frak && rm {.}.pgm’ ::: *.pdf *.pgm
注意,兩個輸入文件擴展名::: *.pdf *.pgm
末。
我能做些什麼來使parallel
按照例行程序a)?
編輯:
這是整個代碼提出奧萊丹下我曾嘗試:
generate_pgm() {
PDF="$1"
find . -name \*.pdf | parallel 'mkdir -p {.} && gs -dQUIET -dINTERPOLATE -dSAFER -dBATCH -dNOPAUSE -dPDFSETTINGS=/ebook -dNumRenderingThreads=4 -sDEVICE=pgmraw -r300 -dTextAlphaBits=4 -sProcessColorModel=DeviceGray -sColorConversionStrategy=Gray -dOverrideICC -o {.}/{.}-%03d.pgm {}' ::: *.pdf
}
export -f generate_pgm
ocr() {
PGM="$1"
find . -name \*.pgm | parallel 'tesseract {} {.} -l deu_frak && rm {.}.pgm'
rm "$PGM"
}
export -f ocr
time parallel -j 4 --progress --eta 'generate_pgm {}; parallel --argsep ,,, ocr ,,, pgm/*.pgm' ::: *pdf
不幸的是,它已經成功爲這個劇本基本上會做同樣的我原來的腳本。它將創建所有PDF的文件夾,並開始將所有PDF轉換爲PGM,同時在第一個PGM圖像上啓動OCR,而不是在開始接下來的四個PDF之前通過每個四個PDF的全部過程。
謝謝Ole Tange的回覆。我用上面的寫命令嘗試瞭解決方案1。但是,腳本不會等待每個過程完成,但可以簡單地將PDF轉換爲PGM。我忽略了什麼? –
請參閱編輯一次轉換1的解決方案。 –
您好Ole Tange,不幸的是腳本的編輯也不起作用。它不會超越PDF轉換爲PGM。沒有OCR完成。另外,它告訴我'rm:pgm/*。pgm:沒有這樣的文件或目錄'。 –