Convertendo centenas de jpg em PDF usando o Terminal

7

Eu sei que o comando convert *.jpg myPdf1.pdf pode converter vários arquivos JPEG em um único PDF.

Mas gostaria de converter vários JPEGs em vários PDFs, por exemplo:

myJPG1.jpg → myPDF1.pdf
myJPG2.jpg → myPDF2.pdf
myJPG3.jpg → myPDF3.pdf

Existe alguma maneira decente de gerenciar algo assim?

    
por Just Ask 23.05.2014 / 18:11

2 respostas

8

Meu primeiro instinto para arquivos de processamento em lote é quase sempre find . É excelente se você precisa criar algum tipo de filtragem (o que você não faz aqui), mas ainda é um favorito. Isso também será usado em subdiretórios, a menos que você o informe (com -maxdepth 1 ou outro):

find -name '*.jpg' -exec convert "{}" "{}.pdf" \;
rename 's/\.jpg\.pdf$/.pdf/' *.jpg.pdf

A instrução find / convert gerará uma carga de .jpg.pdf arquivos. O segundo limpa isso.

Talvez uma abordagem um pouco mais elegante em um caso tão simples:

for file in *.jpg ; do convert "$file" "${file/%jpg/pdf}"; done

Isso não é obrigatório e você não precisa mexer na limpeza dos nomes de arquivos.

E eu quase me esqueci, o ImageMagick tem uma saída numérica que pode se encaixar perfeitamente no seu caso de uso. A seguir, basta colocar um identificador de três dígitos ( 000 , 001 , 002 , etc) no final do "myPDF":

convert *.jpg myPDF%03d.pdf

Obviamente, se você está lidando com mais de mil entradas, aumente o número. Se você não quiser zerar, remova o zero inicial.

    
por Oli 23.05.2014 / 18:31
1

Infelizmente, convert altera a imagem antes para ter uma perda mínima de qualidade do original jpg , é necessário usar img2pdf , o que torna pdf com o original jpg então sem perda, eu uso este comando:

1) Isso transforma um arquivo pdf em cada jpg imagem sem perda de resolução ou qualidade:

ls -1 ./*jpg | xargs -L1 -I {} img2pdf {} -o {}.pdf

2) Aqui você terá o *.pdf s como *.jpg.pdf , então fará um pouco de renomeação

mmv "*.jpg.pdf" "#1.pdf"

Você precisa ter instalado img2pdf e mmv

sudo apt install img2pdf mmv
    
por Eduard Florinescu 08.02.2018 / 10:42