Encontre duas imagens e converta-as em .pdf [closed]

2

Eu tenho duas imagens chamadas x.jpg & y.jpg. Eu quero encontrar / localizá-los e convertê-los em .pdf. Eu localizo e converto para .pdf uma imagem por:

convert $(locate x.jpg) file.pdf

Mas, para converter duas imagens, não posso fazer isso. Eu faço:

convert $(locate x.jpg) && convert $(locate y.jpg) file.pdf

Mas sem sucesso. Eu não poderia ter feito isso com para / do loop:

for i in $(locate x.jpg && locate y.jpg); do convert $i file.pdf; done

Esse loop localiza e converte a primeira imagem, mas um erro informa que a segunda imagem não foi encontrada.

Eu quero encontrar duas imagens e colocá-las em um arquivo .pdf.

    
por Arch 31.05.2018 / 16:21

2 respostas

5

Você pode fazer isso com a pesquisa assim:

find path/ -type f -name '[xy]\.jpg' -exec convert {} {}\.pdf \; 

Os arquivos serão nomeados x.jpg.pdf e y.jpg.pdf . find recebe regex para um padrão de nome para que você possa fazer isso em lote para muitos arquivos, você só precisa da regex apropriada. No entanto, isso cria apenas dois arquivos PDF únicos para cada imagem.

Para colocá-los todos em um arquivo PDF, você pode usar o seguinte:

# create a directory in /tmp
mkdir /tmp/output
# find all the images and convert them to single standing PDF files
# then move them to the output directory
find path/ -type f -name '[xy]\.jpg' -exec convert {} {}\.pdf \; -exec mv {}\.pdf /tmp/output/ \;
# now join them all together to a single file
pdfunite /tmp/output/* ~/output.pdf
# normally the system clean up /tmp on restart, but we clean up ourselves
rm -r /tmp/output

Aqui também é necessário um regex adequado para encontrar todos os seus arquivos, mas o resto não é limitado em quantos arquivos você pesquisa assim.

Claro que você pode fazer um script bash a partir disso:

#!/bin/bash
# create a directory in /tmp
tmpdir="$(mktemp -d)"
# find all the images and convert them to single standing PDF files
# then move them to the output directory
find "$1" -type f -name "$2" -exec convert {} {}\.pdf \; -exec mv {}\.pdf "$tmpdir" \;
# now join them all together to a single file
pdfunite "$tmpdir"/* "$3"
# normally the system clean up /tmp on restart, but we clean up ourselves
rm -r "$tmpdir"

Salvar como script.sh e chmod 755 script.sh , agora você pode chamar assim:

# usage script.sh [PATH] '[PATTERN]' [OUTPUT-FILE]
./script.sh path/ '[xy]\.jpg' ~/output.pdf

Para incorporar as mudanças propostas pelo @dessert , o script se torna isso, mas funciona da mesma maneira:

#!/bin/bash
# create a directory in /tmp
tmpdir="$(mktemp -d)"
# find all the images and convert them to single standing PDF files
# then move them to the output directory
find "$1" -type f -name "$2" -exec sh -c 'convert "$1" "$0/${1##*/}.pdf"' $tempdir "{}" \;
# now join them all together to a single file
pdfunite "$tmpdir"/* "$3"
# normally the system clean up /tmp on restart, but we clean up ourselves
rm -r "$tmpdir"

Divirta-se.

    
por Videonauth 31.05.2018 / 16:30
1

Você pode executar algo nos seguintes termos:

echo convert $(locate x.jpg) $(locate y.jpg) +append out.pdf

e se soar bem, remova o eco

convert $(locate x.jpg) $(locate y.jpg) +append out.pdf
    
por JJoao 01.06.2018 / 13:47