현재 디렉토리의 모든 pdf를 png로 변환


16

현재 디렉토리의 bash모든 .pdf파일을 파일 로 변환 하는 스크립트 를 작성하고 싶습니다 .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

답변:


17

정말 이상한 이름, 줄 바꿈 또는 백 슬래시 등을 포함하는 이름 이 있으면 다음 과 같이 할 수 있습니다.

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: 셸에 내장 된 문자열 조작 기능 을 사용하여 확장을 제거합니다.

두 가지 대답 모두 훌륭하지만 사용 된 트릭에 대한 설명과 함께 제공 되므로이 답변을 수락했습니다.
나는

또는 이식 가능하게 (POSIX)하고 특수 문자를 처리 find . -type f -name '*.pdf' -exec sh -c 'for f do convert -verbose -density 500 -resize 800 "$f" "${f%.pdf}.png"; done' find-sh {} + 하십시오 . 설명 및 배경 은 unix.stackexchange.com/a/321753/135943 을 참조하십시오 .
와일드 카드

1
@Wildcard 여기서는 POSIX가 아닌 유일한 것은 find 's -printf이므로 이식성을 위해 필요한 것은`-exec printf '% s \ 0'{} +`로 바꾸는 것입니다.
terdon

14

for다음과 같이 bash 루프를 사용할 수 있습니다 .

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

7

현재 디렉토리의 mogrify모든 파일을 일괄 변환 및 크기 조정 하는 데 사용할 수 있습니다 .pdf.

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

다른 format(이 경우 -format png) 원본을 사용하는 경우 원본 .pdf파일은 그대로 유지됩니다. 확장명을 제외하고 동일한 이름을 가진 출력 파일은로 지정된 확장명으로 변경됩니다 format.


1

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()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.