找到两张图片并将它们转换为.pdf

找到两张图片并将它们转换为.pdf

我有两张名为 x.jpg 和 y.jpg 的图像。我想找到/定位它们并将它们转换为 .pdf。我通过以下方式找到并将一张图像转换为 .pdf:

convert $(locate x.jpg) file.pdf

但对于转换两幅图像,我无法做到这一点。我会:

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

但没有成功。我不可能做到这一点为/做循环以下任一操作:

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

此循环找到并转换第一个图像,但随后出现错误,提示未找到第二个图像。

我想找到两张图片,并将它们放在一个.pdf 文件中。

答案1

您可以使用 find 进行如下操作:

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

然后将命名这些文件,x.jpg.pdf并且y.jpg.pdf.find采用正则表达式作为名称模式,因此您可以批量对许多文件执行此操作,只需使用正确的正则表达式即可。但是,这只会为每个图像创建两个单独的 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

在这里您也需要适当的正则表达式来查找所有文件,但其余部分并不限制您像这样搜索的文件数量。

当然,您可以从中编写一个 bash 脚本:

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

纳入@甜点的建议更改脚本变成了这样,但工作原理相同:

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

玩得开心。

答案2

你可以这样做:

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

如果听起来不错,就消除回声

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

相关内容