我有两张名为 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