偶尔,我编辑了一些文件,想将其移动到其他文件夹。(通常是:移动到 Dropbox 文件夹,我不想在那里工作,以免让文件夹的其他所有者不断收到更新。)例如,我使用
mv file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf
之后,我经常发现自己想将目录更改为上一次移动操作的目标目录。我发现自己按下向上箭头,删除最后一个file.pdf
,按住左箭头,删除mv file.pdf
并替换为cd
。
有没有更快、更智能的方法来做到这一点?是否有“移动文件然后更改目录”命令,或者上次使用的目录的快捷方式,或者类似的东西?
答案1
答案2
如果您不想更改文件名,则可以省略它,mv 将自动添加它;这在移动多个文件时特别有用:
mv file.pdf ../../../Dropbox/sharedfolder/subdirectory/
mv *.pdf ../../../Dropbox/sharedfolder/subdirectory/
使用目录作为最后一个参数,您可以使用!!:$
或,!$
正如 muru 的回答所述。
如果您使用具有通常默认值的 bash,则可以使用Alt+.而是。
(这是 readlineinsert-last-argument
命令;bind -p
将列出所有当前绑定。)
答案3
另一种方法是创建专用于此目的的命令。这可以通过以下方式完成功能看起来像这样:
$ function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }
在哪里:(1) mv-special
是函数名称;(2)变量$1
和$2
是函数中的参数,将被命令mv
和使用cd
;(3) $(echo $2-)
在 var 中的字符串末尾添加一个通配符$2
,并修复了dirname
如果变量$2
只包含路径;(4) $(dirname $(echo $2-))
将仅过滤来自的路径$2
。
根据这个答案该函数可能看起来像:
$ function mv-special { mv $1 $2; cd ${2%/*}; }
其中:${2%/*}
将仅过滤来自的路径$2
。
要作为命令使用,此功能必须出口:
$ export -f mv-special
用法:
$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf
或者:
$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/
请注意 - 对于两种变体 - 第二个参数($2
)必须以文件名或斜杠(/
)结尾。
为了使我们的新命令永久可用,必须将函数的定义和导出命令附加到~/.bashrc
:
# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }
export -f mv-special
或者:
# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd ${2%/*}; }
export -f mv-special
可以创建自定义命令并通过放置在~/bin
以下位置的可执行脚本文件执行/usr/sbin
:如何创建自定义终端命令(运行脚本)?但说实话,我面临着麻烦cd
与此场景中的行为一致。