ディレクトリの繰り返し中にpdftotextを使用すると、「テキストファイルを開けません」という断続的なI / Oエラーが発生するのはなぜですか?

ディレクトリの繰り返し中にpdftotextを使用すると、「テキストファイルを開けません」という断続的なI / Oエラーが発生するのはなぜですか?

pdftotextを使用して多くのPDFファイルをテキストに変換するループを持つbashスクリプトがあります。コードの関連部分は次のとおりです。

cd /data/user/Data/Reports/pdf/
dirs=(A*/)
for directory in "${dirs[@]}"
do
    cd "/data/user/Data/Reports/pdf/$directory"
    files=(*.pdf)
    mkdir -p "/data/user/Data/Reports/txt/$directory"
    for file in "${files[@]}"
    do
        filePrefix=${file%.pdf}
        saveFilename="/data/user/Data/Reports/txt/$directory/$filePrefix.txt"
        pdftotext "$file" "$saveFilename"
    done
done

ほとんどの場合、成功しましたが、次のようなエラーが発生し、テキストファイルが生成されないことがよくあります。

I/O エラー: '/data/user/Data/Reports/txt/AAL-US/AAL-US5_032.txt' テキスト ファイルを開けません。

ターミナルから次を直接送信すると、PDFは問題なく正しくtxtに変換されます。

pdftotxt /data/user/Data/Reports/pdf/AAL-US/AAL-US5_032.pdf /data/user/Data/Reports/txt/AAL-US/AAL-US5_032.txt

このエラーの一般的な問題は、ファイルパスを誤って指定したことですが、端末を介して直接送信すると機能するため、ここではそうではないと確信しています。

ほとんどのファイル変換では動作しますが、一部では失敗するのはなぜですか?

どんな指針でも大変感謝いたします。ありがとうございます。

編集:エラーは毎回同じファイルで発生しないようです。今回は上記のバグのようにAAL-USに問題のないコードです。 ADSK-US8_032.txt テキストファイルが存在しません。端末でこのファイルをテキストに直接変換しようとしましたが、同じエラーが発生しました。ファイルシステムにはまだスペースがあります。 inodeの使用量は54%、ストレージは60%です。私は学校でLinuxクラスター作業をしていますが、クラスターに保存に問題があり、「デバイスに残りのスペースがありません」というエラーが発生することを知りました。これが関連しているかどうかはわかりません。

以下は昨夜実行したstdout stderrから抜粋したものです。

I/O エラー: テキスト ファイル '/data/user/Data/Reports/txt/ADSK-US/ADSK-US8_032.txt' を開けません。 dirCounter = 12/127ファイルカウンター= 1919/1988; ;ファイル名=ADSK-US8_032.pdf;期間=0;日付時間=06/24/20 22:31:31;

役に立つ場合は、私が提出した完全なコードは次のようになります。

cd /data/user/Data/Reports/pdf/
statusFile="/data/user/Projects/Reports/pdfTxtConversion/meta/pdf2textStatus.txt"
dirs=([A-C]*/)
totalDirs=${#dirs[@]}
dirCounter=1

for directory in "${dirs[@]}"
do
    echo "-------------------------------------------"
    echo "Processing directory $directory"
    echo "-------------------------------------------"

    cd "/data/user/Data/Reports/pdf/$directory"
    if [ $? -ne 0 ]; then
        echo "failed to cd to $directory from $PWD"
        exit 1
    fi  

    files=(*.pdf)
    totalFiles=${#files[@]}
    fileCounter=1

    mkdir -p "/data/user/Data/Reports/txt/$directory"
    for file in "${files[@]}"
    do
        startTime=`date +%s`
        filePrefix=${file%.pdf}
        saveFilename="/data/user/Data/Reports/txt/$directory$filePrefix.txt"    
        pdftotext "$file" "$saveFilename"   
        endTime=`date +%s`
        conversionDuration=$((endTime-startTime))
        msg="dirCounter=$dirCounter/$totalDirs; fileCounter=$fileCounter/$totalFiles; directory=$directory; filename=$file; duration=$conversionDuration; datetime=$(date +"%D %T");"
        echo $msg >> $statusFile
        echo $msg
        ((fileCounter++))
    done

    ((dirCounter++))

done

ベストアンサー1

おすすめ記事