Geçerli dizindeki her pdf'yi png'ye dönüştür


16

Geçerli dizindeki bashher .pdfdosyayı bir dosyaya dönüştürmek için bir komut dosyası yazmak istiyorum .png. Örneğin:

$ls .
a.pdf b.pdf
$./pdf2png.sh
Converting pdfs to pngs
a.pdf -> a.png
b.pdf -> b.png

Bu benim en iyi girişimim:

#!/bin/bash
convert -verbose -density 500 -resize '800' a.pdf a.png
convert -verbose -density 500 -resize '800' b.pdf b.png

Yanıtlar:


17

Eğer varsa , gerçekten garip isimler, yeni satır veya ters eğik çizgi ve benzeri ihtiva olanlar, böyle bir şey yapabileceğini:

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

Bu, ona attığınız her şeyle başa çıkabilmelidir.

Kullanılan numaralar:

  • find ... -print0: findsonuçlarının boş karakterle ayrılmış olarak yazdırılmasına neden olur , yeni satırlarla başa çıkalım.
  • IFS= : bu, boşlukla başa çıkmak için gereken kelime ayırmayı devre dışı bırakır.
  • read -r: ters eğik çizgi içeren dosyalarla ilgilenmek için ters eğik çizgi çıkış karakterlerinin yorumlanmasını devre dışı bırakır.
  • read -d '': bulucunun çıktısını ele almak ve dosya adlarını yeni satır karakterleriyle doğru şekilde işlemek için kayıt sınırlayıcıyı boş karakter olarak ayarlar.
  • ${file%.*}.png: eklentiyi kaldırmak için kabuğun dahili dize düzenleme yeteneklerini kullanır.

Her iki cevap da iyi ama bunu kabul ettim çünkü kullanılan hilelerin açıklamasıyla birlikte geliyor.
I Like Kodu

Veya taşınabilir bir şekilde yapın (POSIX) ve yine de özel karakterleri işleyin : Açıklama ve arka plan için find . -type f -name '*.pdf' -exec sh -c 'for f do convert -verbose -density 500 -resize 800 "$f" "${f%.pdf}.png"; done' find-sh {} + bkz. Unix.stackexchange.com/a/321753/135943 .
Wildcard

1
@Wildcard, posix olmayan tek şey find's -printf, bu yüzden taşınabilirlik için ihtiyacınız olan tek şey onu -exec printf '% s \ 0' {} + `ile değiştirmek.
terdon

14

Bash fordöngüsünü aşağıdaki gibi kullanabilirsiniz :

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

7

Geçerli dizindeki mogrifytüm dosyaları toplu dönüştürmek ve yeniden boyutlandırmak için kullanabilirsiniz .pdf:

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

Farklı format(bu durumda -format png) orijinaller .pdfkullanıldığında, dokunulmadan bırakılır; çıktı dosyaları, belirtilen ile değiştirilecek uzantı dışında aynı ada sahiptir format.


1

Bash kullanmakla sınırlı değilseniz .pdf, geçerli dizindeki tüm dosyaları yüksek çözünürlüklü .pnggörüntülere dönüştürmek için bir python betiği kullanabilirsiniz . Diğer giriş / çıkış görüntü türleri için veya için farklı argümanlar kullanmak üzere değiştirilebilir 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()
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.