디렉토리를 반복하는 동안 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

관련 정보