Shell
根據創建日期對 jpg 進行排序並轉換為單個 pdf
在 Mac 上,如何通過終端
jpg
根據創建日期(即stat -f %SB
)對大約 2400 進行排序,並將它們按該順序轉換為一個 pdf?如果
jpg
在今天晚上 11:10 創建了一個,而在同一分鐘後不久在晚上 11:10 創建了第二個,該怎麼辦?創建日期是否有秒數,可以考慮嗎?
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 convert 中的一個錯誤,特別是針對 Ubuntu 18.04 LTS,還是有意關閉了轉換為 pdf? > > >
這種改變是故意的。請參閱https://usn.ubuntu.com/3785-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