我试图将一堆坐在树形结构中的.jpg文件转换为.pdf,每个pdf一页.我使用了Adobe Acrobat的批量(自定义动作)转换(顺便说一下,作为一个侧面问题,这是一个好主意吗?必须有更好的方法!)这是一个非常缓慢而痛苦的过程,其中Acrobat冻结了我.在它冻结之前,它也表现不正常,拒绝一些文件.
所以,为了找到我需要创建的丢失的.pdf文件,我去了cygwin尝试了类似的东西
$ find -name *.jpg -exec ls '{}/.jpg/pdf' \;
我希望这会将{}视为变量,用.pdf替换.jpg,但替换不会发生.我该怎么做呢?
干得好:
find . -name '*.jpg' -exec \ sh -c 'pdf="${1%.jpg}".pdf; test -f "$pdf" || echo missing: $pdf' -- {} \;
诀窍是{}
作为命令行参数传递给子shell,以便您可以在shell变量中使用模式替换,在本例中为$1
(第一个命令行arg).
顺便说一句,"${1/.jpg/pdf}"
也会工作,但"${1%.jpg}".pdf
更准确.
这种方法相对简单,但效率低下,因为它sh
为每个JPG文件启动一个新进程.更高效但更长的解决方案:
find . -name '*.jpg' -print0 | while read -d $'' f; do \ pdf="${f%.jpg}".pdf; test -f "$pdf" || echo missing: $pdf; done