AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 888866
Accepted
Mees de Vries
Mees de Vries
Asked: 2017-03-03 07:41:46 +0800 CST2017-03-03 07:41:46 +0800 CST 2017-03-03 07:41:46 +0800 CST

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

  • 772

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

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

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

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

command-line
  • 3 3 个回答
  • 1716 Views

3 个回答

  • Voted
  1. Best Answer
    muru
    2017-03-03T07:48:34+08:002017-03-03T07:48:34+08:00

    如果您使用的是 bash,那么它的历史交互就是这样做的捷径。前一个命令的最后一个参数的词指示符:

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

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

    在可选的词指示符之后,您可以添加一个或多个有效修饰符的序列,每个修饰符前面都有一个“:”。

    h
    删除尾随路径名组件,只留下头部。

    所以:

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

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

    • 17
  2. deltab
    2017-03-03T10:04:20+08:002017-03-03T10:04:20+08:00

    如果你不改变文件名,你可以省略它,mv 会自动添加它;这在移动多个文件时特别有用:

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

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

    • 4
  3. pa4080
    2017-03-04T03:26:48+08:002017-03-04T03:26:48+08:00

    另一种方法是创建您自己的专用于此目的的命令。这可以通过如下所示的函数来完成:

    $ 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

    • -1

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve