如果我想使用 imagemagick 将 a 转换pdf
为png
图像,我会执行以下操作:
convert -trim -density 400 this_is_a_very_long_filename_of_my_pdf_file.pdf this_is_a_very_long_filename_of_my_pdf_file.png
由于某些原因,pdf 文件通常有一个很长的文件名,我希望该png
文件除了扩展名之外具有相同的名称。
通常我this_is_a_very_long_filename_of_my_pdf_file.pdf
通过选项卡选择两次,zsh-menu
然后pdf
将png
第二个参数更改为手动。
但是有没有更快的方法来做到这一点?
答案1
您可以使用大括号扩展:
convert -trim -density 400 this_is_a_very_long_filename_of_my_pdf_file.{pdf,png}
答案2
对 mogrify 的调用将创建一个新的 png 文件,而不是覆盖 pdf - 希望如此;)
mogrify -trim density 400 -format png th*.pdf
对于 th*.pdf,使用适当的字符数来选择正确的文件或更好的制表符补全,直到获得全名。
通过这种方式,您可以为整个命令创建一个别名,直到 png 参数。
答案3
如果您始终使用相同的命令,但有细微的变化(例如文件名),则可以编写一个函数:
pdf2png() { convert -trim -density 400 "$1" "$1:r.png" }
(此函数特定于zsh
),对于您要转换的每个文件 your_file.pdf:
pdf2png your_file.pdf
注1:您可以为其他shell编写相同类型的函数,但这有点复杂。
注 2:对于,仅当设置了该选项(这不是默认设置)zsh
时,引号才有用。SH_WORD_SPLIT
答案4
您还可以使用历史扩展引用当前命令行上的单词:
convert -trim -density 400 this_is_a_very_long_filename_of_my_pdf_file.pdf !#:$:r.png
- 事件指示符
!#
指到目前为止输入的命令行 - 字指示符
$
表示最后一个单词(扩展之前) - 修饰符
r
删除文件扩展名。这也标志着文本的结束,当历史扩展发生时,文本将被替换。 .png
是新的扩展。这不属于扩展本身。
运行此行时,!#:$:r
将被替换为 pdf 文件的名称减去扩展名,从而根据问题创建命令:
convert -trim -density 400 this_is_a_very_long_filename_of_my_pdf_file.pdf this_is_a_very_long_filename_of_my_pdf_file.png
然后直接执行这一行。
如果你想在历史扩展后检查命令,在执行之前,使用
setopt histverify
这会将扩展的行重新加载到编辑缓冲区中,而不是执行它。
注意:与任何其他扩展不同,历史扩展是在命令保存到历史记录之前执行的。因此echo !#
将显示为echo echo
而不是echo !#
您的$HISTFILE
.