更改目录 (cd) 但仅替换路径的一部分

nat*_*vda 15 bash

不确定是否可能,但我似乎记得从我过去使用 AIX 的时候开始,只需说明路径的哪一部分需要用其他东西替换就可以改变我的路径。例如,假设我有两条路径:

/etc/application-2.0.1/options/default
Run Code Online (Sandbox Code Playgroud)

/etc/application-1.0.8/options/default
Run Code Online (Sandbox Code Playgroud)

我可以使用类似的命令从文件夹 1 切换到文件夹 2

cd /2.0.1/1.0.8/

这将替换路径中的字符串2.0.11.0.8. 显然这现在对我不起作用。但是有没有办法做到这一点?

qbi*_*qbi 11

如果您使用zsh作为 shell,则只需输入cd 1.0.8 2.0.1.


kou*_*hik 9

这应该在 ubuntu 10.04 上的 bash 中工作:cd ${PWD/old/new}。基本上,这将替换第一次出现old在你当前的工作目录new。下面2个例子。

示例 1

ing02741@hoster:~$ cd /home/ing02741/Videos/
ing02741@hoster:~/Videos$ cd ${PWD/ing02741/koushik}
ing02741@hoster:/home/koushik/Videos$ 
Run Code Online (Sandbox Code Playgroud)

示例 2

ing02741@hoster:~/src/cdtest$ mkdir dir-v1.0.1 dir-v2.2.2 dir-v3.0.7
ing02741@hoster:~/src/cdtest$ mkdir dir-v1.0.1/ind dir-v2.2.2/ind dir-v3.0.7/ind
ing02741@hoster:~/src/cdtest$ cd dir-v1.0.1/ind/
ing02741@hoster:~/src/cdtest/dir-v1.0.1/ind$ cd ${PWD/1.0.1/2.2.2}
ing02741@hoster:~/src/cdtest/dir-v2.2.2/ind$ 
Run Code Online (Sandbox Code Playgroud)

借用 sepp2k 的答案的想法,你可以做一个这样的功能

function mycd { cd ${PWD/$1/$2} }
Run Code Online (Sandbox Code Playgroud)

然后使用类似的东西mycd 2.0.1 1.0.8来切换。


小智 9

我自己使用过(也错过了)这个功能。这取决于您使用的 *nix 的口味和/或版本。如果您使用 bash,这里有一个方便的方法来扩展内置 cd 以包含此功能。把它放在你的 .bashrc 中(或者将它粘贴到你的 bash shell 中并按回车键)。

function cd() { if [ $# -eq 2 ]; then builtin cd "${PWD/$1/$2}"; else builtin cd "$1"; fi }
Run Code Online (Sandbox Code Playgroud)


Gil*_*il' 7

您可能还记得历史扩展。我不知道 AIX 上的 shell 中有什么可用,但是在 bash 中执行此操作的一种方法是^2.0.1^1.0.8.

对于具有强大命令行编辑功能的 bash 和 zsh 等 shell,历史扩展不太有用。您可以使用箭头键调用之前的命令,并使用Alt+.插入上一个命令的最后一个单词(按两次可到达之前的命令,依此类推)。