ディレクトリを繰り返してbashスクリプトをクリーンアップする方法

ディレクトリを繰り返してbashスクリプトをクリーンアップする方法

このスクリプトをどのようにきれいにすることができますか? 1つの方法は、さまざまなパスを保持し、そのパスを繰り返すものを作成することを前提としています。繰り返しループブロックではなく、これをよりきれいにするために私ができる他の方法はありますか?

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

関連情報