我需要将一系列图像从一种格式转换为另一种格式。但我需要删除扩展名或后缀,以便将其传递给管道中的另一个软件。我正在尝试使用以下命令
find . -type f -iname "*.pdf" -exec convert {} $(basename {} .pdf).png \;
目的是保留
*.pdf
文件,并拥有新的 *.png
文件。然而,生成的文件最终的扩展名是 .pdf.png
据我了解,
$(basename {} .pdf)
是在find
命令之前执行的,导致文字{}
,这就是为什么convert的输出是{}.png
。
我应该添加
"`´'
的任何特定组合,还是明确调用 sh -c
使这个工作?
我使用 zsh 作为我的 shell
如有任何帮助,我们将不胜感激
使用
find
:
find . -type f -iname "*.pdf" -exec zsh -c 'convert $1 ${1:r}.png' _ {} \;
使用 shell 循环(与
find
不同,这不会为每个文件启动子 shell):
setopt extendedglob
for fl in (#i)**/*.pdf; do
convert $fl ${fl:r}.png
done
使用
zmv
(更紧凑):
autoload zmv
zmv -p convert '(#i)**/*.pdf' '${f:r}.png'