有时,我编辑了一些文件并想将其移动到不同的文件夹。(通常:到一个 Dropbox 文件夹,我不想在该文件夹中工作以避免给文件夹的其他所有者不断更新。)我这样做,例如,
mv file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf
之后,我经常发现自己想将目录更改为我之前移动操作的目标目录。我发现自己按了向上箭头,删除了最后一个file.pdf
,按住左键,删除mv file.pdf
并替换为cd
.
有没有更快、更智能的方法来做到这一点?是否有“移动文件然后将目录更改为”命令,或上次使用目录的快捷方式,或类似的东西?
如果您使用的是 bash,那么它的历史交互就是这样做的捷径。前一个命令的最后一个参数的词指示符:
结合修饰符删除最后一个路径名组件:
在可选的词指示符之后,您可以添加一个或多个有效修饰符的序列,每个修饰符前面都有一个“:”。
所以:
zsh 也可以使用相同的快捷方式。
如果你不改变文件名,你可以省略它,mv 会自动添加它;这在移动多个文件时特别有用:
将目录作为最后一个参数,您可以使用
!!:$
或!$
按照 muru 的答案描述。如果您使用具有通常默认值的 bash,则可以使用Alt+.代替。
(这是 readline
insert-last-argument
命令;bind -p
将列出您当前的所有绑定。)另一种方法是创建您自己的专用于此目的的命令。这可以通过如下所示的函数来完成:
其中:(1)
mv-special
是函数名;(2)变量$1
和$2
是函数中将被命令mv
和使用的参数cd
;(3)$(echo $2-)
在 var 中的字符串末尾添加一个通配符$2
,并修复dirname
如果变量$2
只包含路径的行为;(4)$(dirname $(echo $2-))
将仅过滤来自 的路径$2
。根据这个答案,函数可能如下所示:
其中:
${2%/*}
将仅过滤来自$2
.要作为命令使用,必须导出此函数:
用法:
或者:
请注意 - 对于这两种变体 - 第二个参数 (
$2
) 必须以文件名或斜杠 (/
) 结尾。要成为我们永久可用的新命令,函数的定义和导出命令必须附加到
~/.bashrc
:或者:
可以通过放置在
~/bin
或其中的可执行脚本文件来制作自定义命令/usr/sbin
:如何创建自定义终端命令(运行脚本)?但老实说,我在这种情况下的行为遇到了麻烦。cd