Найдите два изображения и преобразуйте их в .pdf [закрыто]

У меня есть два изображения с именами x.jpg и y.jpg. Я хочу найти / найти их и преобразовать в .pdf. Я нахожу и конвертирую в .pdf одно изображение с помощью:

convert $(locate x.jpg) file.pdf

Но для преобразования двух изображений я не могу этого сделать. Я:

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

Но безуспешно. Я бы не смог этого сделать и с циклом for / do :

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

Этот цикл находит и преобразует первое изображение, но затем появляется сообщение об ошибке, что второе изображение не было найдено.

Я хочу найти два изображения и поместить их в один файл .pdf.

1
задан 1 June 2018 в 13:13

2 ответа

Можно сделать это с находкой как так:

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

Файлы затем назовут x.jpg.pdf и y.jpg.pdf. find берет regex для шаблона имени, таким образом, можно сделать это в пакете для многих файлов, Вам просто нужен надлежащий regex. Это однако только создает Вас два единственных файла PDF для каждого изображения.

Для помещения их всех в один файл PDF, можно использовать следующее:

# 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

Здесь также Вам нужно к надлежащему regex для нахождения всех Ваших файлов, но остальное не ограничено на том, сколько файлов Вы ищете как это.

Конечно, можно сделать сценарий удара от этого:

#!/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"

Сохраните его как script.sh и сделайте chmod 755 script.sh теперь можно назвать его как это:

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

К предложенным изменениям incorperate @dessert сценарий становится этим, но работает то же:

#!/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"

Весело провести время.

4
ответ дан 3 December 2019 в 06:29

Вы могли выполнить что-то вроде:

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

и если это звучит хорошо, удаляет эхо

convert $(locate x.jpg) $(locate y.jpg) +append out.pdf
2
ответ дан 3 December 2019 в 06:29

Другие вопросы по тегам:

Похожие вопросы: