このスクリプトをどのようにきれいにすることができますか? 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