将目录更改为移动操作的目标


12

有时,我已经编辑了一些文件,并希望将其移动到其他文件夹。(通常:到一个Dropbox文件夹,在该文件夹中,我不想工作,以免给该文件夹的其他所有者不断更新。)例如,我使用

mv file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf

之后,我经常发现自己想要将目录更改为上一个移动操作的目标目录。我发现自己按下了向上箭头,删除了决赛file.pdf,向左按住,mv file.pdf将其删除并替换为cd

有没有更快,更聪明的方法来做到这一点?是否有“移动文件,然后将目录更改为”命令,或者上次使用目录的快捷方式,或者类似的东西?


1
如果你按住CTRL +左键,它会通过文字这是更快左

旁注,而不是您的shell问题的答案:我通常在编辑时暂停Dropbox。它还确保“在我的脚下”不会更改其他文件。
君士坦丁撒鲁哈斯

Answers:


17

如果您使用的是bash,则它的历史记录交互只是此操作的快捷方式。上一个命令的最后一个参数的单词指示符

!!:$
指定前面命令的最后一个参数。可以将其缩短为!$

修饰符结合使用以删除最后一个路径名组件:

在可选的单词指示符之后,您可以添加一个或多个有效修饰符的序列,每个修饰符前均带有':'。

h
删除尾随的路径名组件,仅保留头部。

所以:

$ echo /ab/c/d
/ab/c/d
$ echo !$:h
echo /ab/c
/ab/c

相同的快捷方式也可以与zsh一起使用。


1
太酷了
年长的怪胎

4

如果您不更改文件名,则可以忽略它,而mv会自动添加它;这在移动多个文件时特别有用:

mv file.pdf ../../../Dropbox/sharedfolder/subdirectory/

mv *.pdf ../../../Dropbox/sharedfolder/subdirectory/

将目录作为最后一个参数,您可以使用!!:$!$作为大师的答案描述。
如果您使用的bash具有通常的默认值,则可以使用Alt+ .代替。
(这是readline insert-last-argument命令;bind -p将列出您当前的所有绑定。)


1
需要注意的是省略了目标文件名可以静默覆盖目标文件,如果它已经existis

mv除非指定选项-i/ --interactive-n/,否则始终始终以静默方式覆盖目标文件--no-clobber。这就是为什么我有alias mv='mv -i' cp='cp -i'我的.bashrc
David Foerster'3

-1

另一种方法是创建自己的专用于此目的的命令。这可以通过如下函数实现:

$ 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)必须以文件名或斜杠(/)结尾。

为了使我们的新命令永久可用,必须将函数的定义和export命令附加到~/.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

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.