回答:
あなたが持っている場合は、本当に奇妙な名前、改行やバックスラッシュなどが含まれているものを、あなたはこのような何かを行うことができます:
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の出力を処理し、改行文字を含むファイル名を正しく処理するために、レコード区切り文字をヌル文字に設定します。${file%.*}.png
:シェルの組み込みの文字列操作機能を使用して、拡張機能を削除します。find . -type f -name '*.pdf' -exec sh -c 'for f do convert -verbose -density 500 -resize 800 "$f" "${f%.pdf}.png"; done' find-sh {} +
参照してください。
-printf
なので、移植性に必要なのはそれを `-exec printf '%s \ 0' {} +`に置き換えることだけです。
現在のディレクトリ内のmogrify
すべて.pdf
のをバッチ変換およびサイズ変更するために使用できます。
mogrify -verbose -density 500 -resize 800 -format png ./*.pdf
別のformat
(この場合-format png
)を使用する場合、元.pdf
のsはそのまま残ります。出力ファイルは、拡張子がで指定されたものに変更されることを除いて、同じ名前を持ちますformat
。
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()