이 스크립트를 어떻게 더 깔끔하게 만들 수 있나요? 한 가지 방법은 다양한 경로를 보유하고 해당 경로를 반복하는 무언가를 만드는 것이라고 가정합니다. 반복되는 루프 블록이 아닌 이를 더 깔끔하게 만들기 위해 내가 할 수 있는 다른 방법이 있습니까?
#!/bin/bash/
SRCD='/Users/Connor/Documents/GitHub/WhatThePDF/dat/forms/*.pdf'
for file in $SRCD
do
echo ${file}
destfile="${file/.pdf/_source.txt}"
echo ${destfile}
qpdf --qdf --object-streams=disable ${file} ${destfile}
done
SRCD='/Users/Connor/Documents/GitHub/WhatThePDF/dat/data/*.pdf'
for file in $SRCD
do
echo ${file}
destfile="${file/.pdf/_source.txt}"
echo ${destfile}
qpdf --qdf --object-streams=disable ${file} ${destfile}
done
SRCD='/Users/Connor/Documents/GitHub/WhatThePDF/dat/maps/*.pdf'
for file in $SRCD
do
echo ${file}
destfile="${file/.pdf/_source.txt}"
echo ${destfile}
qpdf --qdf --object-streams=disable ${file} ${destfile}
done
SRCD='/Users/Connor/Documents/GitHub/WhatThePDF/dat/none/*.pdf'
for file in $SRCD
do
echo ${file}
destfile="${file/.pdf/_source.txt}"
echo ${destfile}
qpdf --qdf --object-streams=disable ${file} ${destfile}
done
답변1
이를 단일 루프로 단순화하고 모든 파일 이름을 한 번에 전달할 수 있습니다.
#!/bin/bash
for file in /Users/Connor/Documents/GitHub/WhatThePDF/dat/{forms,data,maps,none}/*.pdf
do
echo "${file}"
destfile="${file/.pdf/_source.txt}"
echo "${destfile}"
qpdf --qdf --object-streams=disable "${file}" "${destfile}"
done
좀 더 쉽게 읽을 수 있도록 조금 분리해 보겠습니다.
예를 들어 cd
디렉토리로 이동하고 실패 시 중단합니다.
#!/bin/bash
cd /Users/Connor/Documents/GitHub/WhatThePDF/dat || exit 255
for file in {forms,data,maps,none}/*.pdf
do
echo "${file}"
destfile="${file/.pdf/_source.txt}"
echo "${destfile}"
qpdf --qdf --object-streams=disable "${file}" "${destfile}"
done