У меня есть два изображения с именами 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.
Можно сделать это с находкой как так:
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"
Весело провести время.
Вы могли выполнить что-то вроде:
echo convert $(locate x.jpg) $(locate y.jpg) +append out.pdf
и если это звучит хорошо, удаляет эхо
convert $(locate x.jpg) $(locate y.jpg) +append out.pdf