web-dev-qa-db-ja.com

現在のディレクトリ内のすべてのpdfをpngに変換します

現在のディレクトリにあるすべての.pdfファイルを.pngファイルに変換するbashスクリプトを記述したいと思います。例えば:

$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
16
I Like to Code

really奇妙な名前、改行やバックスラッシュなどを含む名前がある場合は、次のようにすることができます。

find . -type f -name '*.pdf' -print0 |
  while IFS= read -r -d '' file
    do convert -verbose -density 500 -resize 800 "${file}" "${file%.*}.png"
  done

それはあなたがそれに投げかけるほとんどすべてのものに対処できるはずです。

使用されるトリック:

  • find ... -print0findに結果をnull文字で区切って出力させます。改行を扱いましょう。
  • IFS=:空白を処理するために必要なWord分割を無効にします。
  • read -r:バックスラッシュを含むファイルを処理するために、バックスラッシュエスケープ文字の解釈を無効にします。
  • read -d '':レコード区切り文字をヌル文字に設定して、findの出力を処理し、改行文字を含むファイル名を正しく処理します。
  • ${file%.*}.png:シェルに組み込まれている 文字列操作能力 を使用して、拡張機能を削除します。
17
terdon

次のようにbash forループを使用できます。

#!/bin/bash
for pdfile in *.pdf ; do
  convert -verbose -density 500 -resize '800' "${pdfile}" "${pdfile%.*}".png
done
14
mkc

mogrifyを使用して、すべてのバッチ変換とサイズ変更を行うことができます.pdfs、現在のディレクトリ:

mogrify -verbose -density 500 -resize 800 -format png ./*.pdf

別のformatを使用する場合(この場合は-format png) オリジナル .pdfsはそのままにされ、出力ファイルはformatで指定された拡張子に変更される拡張子を除いて同じ名前になります。

7
don_crissti

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()
1
MattKelly