소문자로 파일을 텍스트로 변환하면 빈 *.txt 파일이 나타납니다.

소문자로 파일을 텍스트로 변환하면 빈 *.txt 파일이 나타납니다.

폴더 안에 소문자 확장자를 가진 특정 유형의 파일이 있는지 확인한 후 다음과 같이 콘텐츠를 추출합니다.

existDoc=""$(ls | grep .DOC | wc -l)

if [ $existDoc -gt 0 ]; then
    for file in *.DOC
    do
        mv $file $(basename "$file" .DOC)".doc"
    done
fi

그런 다음 변환

for word in *.doc
    do
        text_doc=""$(basename "$word" .doc)
        sudo catdoc $word > $text_doc".txt"
    done

문제는 뚜렷한 이유 없이 "*.doc.txt"라는 이름의 빈 파일이 새로 생성된다는 것입니다.

답변1

몇 가지:

내가 올바르게 이해했다면 모든 파일 이름과 파일 이름을 만드는 데 사용된 텍스트 파일 *.DOC의 확장자를 소문자로 지정 하고 싶을 것입니다 .catdoc

shopt -s nullglob
for doc in ./*.DOC; do
    new_doc="${doc%.DOC}.doc"
    txt_doc="${doc%.DOC}.txt"

    catdoc "$doc" >"$txt_doc"
    mv "$doc" "$new_doc"
done

또는 더 짧게:

shopt -s nullglob
for doc in ./*.DOC; do
    catdoc "$doc" >"${doc%.DOC}.txt"
    mv "$doc" "${doc%.DOC}.doc"
done
  • 인수 확장(또는 POSIX 셸)을 사용하여 ${doc%.DOC}.txt의 파일 이름에서 접미사를 제거합니다.${parameter%word}bash.DOC$doc
  • 쉘 옵션을 설정하면 접미사가 붙은 파일이 없으면 nullglob아무것도 일치하지 않습니다. 설정하지 않은 경우 파일이 없으면 문자열을 가져옵니다.*.DOC.DOC*.DOC$doc.DOC
  • 로 끝나지 않으려면 ./접두사 in을 사용하세요 ../*.DOC-

관련 정보