Har*_*nan 57 linux shell ubuntu
我使用以下命令将jpg目录中的所有文件转换并合并到单个pdf文件中.
convert *.jpg file.pdf
目录中的文件编号1.jpg为123.jpg.转换很顺利,但转换后页面都混淆了.我想要的PDF有从页面1.jpg到123.jpg以相同的顺序,因为它们命名.我也尝试使用以下命令:
cd 1 
FILES=$( find . -type f -name "*jpg" | cut -d/ -f 2)
mkdir temp && cd temp 
for file in $FILES; do 
    BASE=$(echo $file | sed 's/.jpg//g');
    convert ../$BASE.jpg $BASE.pdf; 
    done && 
pdftk *pdf cat output ../1.pdf && 
cd .. 
rm -rf temp
但仍然没有运气.操作平台Linux.
小智 94
或者只是阅读ls手册并查看:
-v文本中的自然类型(版本)数字
所以,在单一命令中做我们需要的.
convert `ls -v *.jpg` foobar.pdf
玩得开心;)F.
Del*_*ani 16
问题是因为你的shell正在以纯字母顺序扩展通配符,并且因为数字的长度不同,顺序将是不正确的:
$ echo *.jpg
1.jpg 10.jpg 100.jpg 101.jpg 102.jpg ...
解决方案是根据需要用零填充文件名,以便在运行convert命令之前它们的长度相同:
$ for i in *.jpg; do num=`expr match "$i" '\([0-9]\+\).*'`;
> padded=`printf "%03d" $num`; mv -v "$i" "${i/$num/$padded}"; done
现在文件将以正确的顺序与通配符匹配,为convert命令做好准备:
$ echo *.jpg
001.jpg 002.jpg 003.jpg 004.jpg 005.jpg 006.jpg 007.jpg 008.jpg ...
小智 6
你可以用
convert '%d.jpg[1-132]' file.pdf
通过https://www.imagemagick.org/script/command-line-processing.php:
引用其他图像文件的另一种方法是在具有场景范围的文件名中嵌入格式化字符。考虑文件名
image-%d.jpg[1-5]。命令
magick image-%d.jpg[1-5]导致 ImageMagick 尝试读取具有以下文件名的图像:
image-1.jpg image-2.jpg image-3.jpg image-4.jpg image-5.jpg
另见https://www.imagemagick.org/script/convert.php
当我想合并许多高分辨率 jpeg 图像(来自扫描的书籍)时,上述所有答案对我来说都失败了。
Imagemagick 尝试将所有文件加载到 RAM 中,因此我使用了以下两步方法:
find -iname "*.JPG" | xargs -I'{}' convert {} {}.pdf
pdfunite *.pdf merged_file.pdf
请注意,通过这种方法,您还可以使用 GNU 并行来加速转换:
find -iname "*.JPG" | parallel -I'{}' convert {} {}.pdf
| 归档时间: | 
 | 
| 查看次数: | 54179 次 | 
| 最近记录: |