在 Mac 上,我如何通过终端jpg
根据创建日期(即stat -f %SB
)对大约 2400 个文件进行排序,并按该顺序将它们转换为一个 pdf?
如果jpg
今天晚上 11:10 创建了一个,并在同一分钟内晚上 11:10 创建了第二个,该怎么办?创建日期中是否有可以考虑的秒数?
答案1
这取决于文件系统。例如,在我的主机上,我使用第四个扩展文件系统(ext4),并stat
因此报告文件:
$ touch foo; stat foo; rm foo
File: 'foo'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fc00h/64512d Inode: 262155 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ ownerusername) Gid: ( 1000/ ownerusername)
Access: 2017-06-21 14:28:16.150323827 -0700
Modify: 2017-06-21 14:28:16.150323827 -0700
Change: 2017-06-21 14:28:16.150323827 -0700
Birth: -
所以你可以使用最后修改时间作为创造时间有点用词不当。
find /path/to/images -type f -print0 -name \*.jpg | xargs -0 stat -c "%y|%n" | sort | awk -F'|' '{print $2}'
这个有点麻烦的结构将为您提供按上次修改时间排序的文件列表(前提是|
您的名称中没有包含任何文件)。
一旦您查看了此列表,您就可以使用 Imagemagick 的convert
工具来组合 PDF:
convert <<list of files>> outputfile.pdf
或者,一次性完成所有操作:
convert $(find /path/to/images -type f -print0 -name \*.jpg | xargs -0 stat -c "%y|%n" | sort | awk -F'|' '{print $2}') outputfile.pdf
答案2
ImageMagick 的简单命令convert
行适合我。
我用下面的命令行进行了测试(在有14个png文件的目录中),pdf文件中每页都会有一张图片。
convert *.png out-parrot.pdf
但某些版本可能会出现问题convert
convert
它按预期与Parrot 4.4 中的版本一起工作
$convert --version
Version: ImageMagick 6.9.10-23 Q16 x86_64 20190101 https://imagemagick.org
但它不适用于convert
Ubuntu 18.04.1 LTS 中的版本(截至2019年2月)
$ convert --version
Version: ImageMagick 6.9.7-4 Q16 x86_64 20170114 http://www.imagemagick.org
此版本“未授权”写入 pdf 文件
$ convert *.png out-ubuntu.pdf
convert-im6.q16: not authorized `out-ubuntu.pdf' @ error/constitute.c/WriteImage/1037.
$ apt-cache policy imagemagick
imagemagick:
Installed: 8:6.9.7.4+dfsg-16ubuntu6.4
Candidate: 8:6.9.7.4+dfsg-16ubuntu6.4
Version table:
*** 8:6.9.7.4+dfsg-16ubuntu6.4 500
500 http://se.archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages
500 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Packages
100 /var/lib/dpkg/status
8:6.9.7.4+dfsg-16ubuntu6 500
500 http://se.archive.ubuntu.com/ubuntu bionic/main amd64 Packages
通过 Ubuntu 邮件列表,我得到了以下答案(由于 ImageMagick 漏洞问题,转换为 pdf 被关闭)
这是 ImageMagick 转换中的错误,特别是针对 Ubuntu 18.04 LTS,还是有意关闭转换为 pdf?
这种改变是有意为之的。看https://usn.ubuntu.com/3785-1/
谢谢,杰里米·比查
答案3
安装 ImageMagick。假设 JPG 图像位于~/images
并且文件名不包含任何空格(也不包含任何\[*?
)并且您有一个目录~/combined
:
convert -combine -append $(ls -tr ~/images/*.jpg) ~/combined/all.jpg
或者
convert -combine -append $(ls -tr ~/images/*.jpg) ~/combined/all.pdf
如果图像大小不同,您将收到警告。-append
从上到下组合图像。更改为+append
,图像将从左到右合并。
时间:虽然ls -l
显示时间精确到小时:分钟,但我相信 Linux 会跟踪访问、修改和年龄/更改时间,精确到纳秒。因此排序ls -tr
确实需要几分之一秒的时间。