.pdf
現在のディレクトリ内のすべてのファイルをファイルに変換するBashスクリプトを作成したいと思います.png
。
たとえば、
$ls .
a.pdf b.pdf
$./pdf2png.sh
Converting pdfs to pngs
a.pdf -> a.png
b.pdf -> b.png
最善の試みは次のとおりです。
#!/bin/bash
convert -verbose -density 500 -resize '800' a.pdf a.png
convert -verbose -density 500 -resize '800' b.pdf b.png
答え1
お持ちの場合本物奇妙な名前、改行やバックスラッシュなどを含む名前は、次のようにすることができます。
find . -type f -name '*.pdf' -print0 |
while IFS= read -r -d '' file
do convert -verbose -density 500 -resize 800 "${file}" "${file%.*}.png"
done
あなたが投げるすべてを処理できるはずです。
使用のヒント:
find ... -print0
:find
結果はヌル文字で区切られて印刷されるため、改行文字を処理できます。IFS=
: スペースを処理するための単語分割を無効にします。read -r
:バックスラッシュを含むファイルを処理するときにバックスラッシュエスケープ文字の解釈を無効にします。read -d ''
:findの出力を処理し、改行文字を含むファイル名を正しく処理するには、レコード区切り文字をNULL文字に設定します。${file%.*}.png
:シェルに組み込まれている機能を使用します。文字列操作機能拡張機能を削除してください。
答え2
for
次のようにbashループを使用できます。
#!/bin/bash
for pdfile in *.pdf ; do
convert -verbose -density 500 -resize '800' "${pdfile}" "${pdfile%.*}".png
done
答え3
mogrify
バッチ変換を使用して、.pdf
現在のディレクトリのすべてのサイズを変更できます。
mogrify -verbose -density 500 -resize 800 -format png ./*.pdf
別のformat
(この場合-format png
)を使用すると、元の.pdf
ファイルは変更されず、出力ファイルの名前は同じですが、拡張子は指定された拡張子に変更されますformat
。
答え4
Bashの使用に限定されない場合は、Pythonスクリプトを使用して.pdf
現在のディレクトリ内のすべてのファイルを高解像度.png
画像に変換できます。他の入力/出力画像タイプまたはconvert
。
#! /usr/bin/env python
import os
def main():
dir_list = os.listdir('.')
for full_file_name in dir_list:
base_name, extension = os.path.splitext(full_file_name)
if extension == '.pdf': # then .pdf file --> convert to image!
cmd_str = ' '.join(['convert',
'-density 400',
full_file_name,
base_name + '.png'])
print(cmd_str) # echo command to terminal
os.system(cmd_str) # execute command
if __name__ == '__main__':
main()