폴더 안에 소문자 확장자를 가진 특정 유형의 파일이 있는지 확인한 후 다음과 같이 콘텐츠를 추출합니다.
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
몇 가지:
- 출력을 구문 분석하지 않습니다.
ls
. - 변수 참조.
sudo
? 왜?
내가 올바르게 이해했다면 모든 파일 이름과 파일 이름을 만드는 데 사용된 텍스트 파일 *.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
-