如何获取没有匹配.pdf的.jpg文件列表?

Rub*_*uby 3 unix pdf bash shell adobe

我试图将一堆坐在树形结构中的.jpg文件转换为.pdf,每个pdf一页.我使用了Adobe Acrobat的批量(自定义动作)转换(顺便说一下,作为一个侧面问题,这是一个好主意吗?必须有更好的方法!)这是一个非常缓慢而痛苦的过程,其中Acrobat冻结了我.在它冻结之前,它也表现不正常,拒绝一些文件.

所以,为了找到我需要创建的丢失的.pdf文件,我去了cygwin尝试了类似的东西

$ find -name  *.jpg  -exec ls '{}/.jpg/pdf' \;
Run Code Online (Sandbox Code Playgroud)

我希望这会将{}视为变量,用.pdf替换.jpg,但替换不会发生.我该怎么做呢?

Sto*_*ica 5

干得好:

find . -name '*.jpg' -exec \
    sh -c 'pdf="${1%.jpg}".pdf; test -f "$pdf" || echo missing: $pdf' -- {} \;
Run Code Online (Sandbox Code Playgroud)

诀窍是{}作为命令行参数传递给子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
Run Code Online (Sandbox Code Playgroud)