スクリプトの簡単な変更:
#!/bin/bash
# Convert pdf to png
for f in *.pdf
do
png="png/${f%pdf}png"
if [ -e "$png" -a "$f" -nt "$png" ]; then
continue
fi
echo "Converting $f"
gs -dNOPAUSE -dBATCH -sDEVICE=png256 -r480 -q -sOutputFile="$png" "$f"
done
まず、$png
インプレース編集を使用して変数を作成します。基本的に、拡張子である%pdf
の最後の出現を削除するように bash に指示します。pdf
次に、これを接頭辞としてpng/
png 拡張子を追加する文字列に配置できます。これにより、最後の名前変更コマンドが保存されます。
これで、特定の条件が満たされた場合にループするif
ステートメントができました。continue
続行とは、この反復で他に何も実行せずに、ループの次の反復に進むことを意味します。条件は、「$png」が存在する ( -e "$png"
) かつ ( -a
) 「$f」が「$png」よりも新しい ( "$f" -nt "$png"
) ことです。
しかし、私は Makefile を書くことをお勧めします:
PDFS := $(wildcard *.pdf)
PNGS := $(addprefix png/,$(PDFS:.pdf=.png))
all: $(PNGS)
png/%.png: %.pdf
gs -dNOPAUSE -dBATCH -sDEVICE=png256 -r480 -q -sOutputFile="$@" "$<"
そして、make
新しい PNG を生成したいときはいつでも実行してください。