如何用较少的击键键入几个文件名


16

如果要使用imagemagick 将图像转换pdfpng图像,请执行以下操作:

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为第二个参数。

但是,有更快的方法吗?

Answers:



5

进行mogrify的调用将创建一个新的png文件,而不是覆盖pdf-希望如此;)

mogrify -trim density 400 -format png th*.pdf

对于**。pdf,请使用适当的字符数来选择正确的文件或更好的制表符补全,直到您拥有全名为止。

这样,您可以为整个命令创建别名,直到png参数为止。


5

如果您始终使用相同的命令(但文件名很小)使用较小的变体,则可以编写一个函数:

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

考虑使用变量存储文件名。它们也会自动完成:

f="this_is_a_very_long_filename_of_my_pdf_file"
convert -trim -density 400 "$f.pdf" "$f.png"

我使用引号,因为有时空格会咬住。

这样做的重要好处是:

  1. 您可以使用$ f中的值执行进一步的操作,知道它指向正确的文件
  2. 将其停留在cat listOfFiles | while read f; do ... ; done循环结构中是最短的跃点。
  3. 通常,自动生成的文件名非常相似,并且如果需要执行自动完成,则自动完成会非常烦人abc<tab>d<tab>x<tab>2<tab>。通过这种方式,您只需键入一次即可,甚至可以选择最新的文件或最大的文件通过像f=\ls -t 这样的脚本| head -1'',而不是先运行搜索,而是寻找文件名并将其转录为某种经过训练的猴子。

2

您还可以使用“ 历史记录扩展”来引用当前命令行上的单词:

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


2

在此特殊示例中,不反对使用括号扩展。但是,zle小部件要灵活copy-prev-shell-word一些,它的名称是建议的,并且如果您想要一个前一个类似的参数(它不能系统地从中衍生),则非常方便。

绑定小部件,例如CTRL+W

bindkey '^W' copy-prev-shell-word

如果您像我一样懒,请使用此bindkey序列

bindkey '^W^W' copy-prev-shell-word
bindkey -s '^W' ' ^W^W'

获得以下行为:

  • CTRL+W前导空格插入前一个shell单词(因此,您节省了一次击键!)
  • CTRL+W CTRL+W 直接插入前一个外壳词
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.