디렉토리를 반복하고 bash 스크립트를 정리하는 방법

디렉토리를 반복하고 bash 스크립트를 정리하는 방법

이 스크립트를 어떻게 더 깔끔하게 만들 수 있나요? 한 가지 방법은 다양한 경로를 보유하고 해당 경로를 반복하는 무언가를 만드는 것이라고 가정합니다. 반복되는 루프 블록이 아닌 이를 더 깔끔하게 만들기 위해 내가 할 수 있는 다른 방법이 있습니까?

#!/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

관련 정보