在我们的服务器上,我们有几个重复的文件夹结构用于测试、暂存和生产。除了细微的变化之外,这三个之间的文件夹结构通常是相同的。
当我开发 WordPress 插件时,我会深入研究开发文件夹结构(例如~/dev/com/wp-content/plugins/myplugin
)。我知道那是~/staging/com/wp-content/plugins/myplugin
存在的。
如果我当前的工作目录是~/dev/com/wp-content/plugins/myplugin
,我可以轻松切换到~/staging/com/wp-content/plugins/myplugin
没有输入整个目录结构?
我想输入类似的内容cdx
~/staging
, 甚至cdx
../../../../../staging
并让命令尝试使用我当前的目录路径遍历新目录。显然,如果新文件夹不包含正确的结构,则会出错。
我是否卡住了输入整个目录结构?或者,还有更好的方法?
答案1
使用字符串替换bash
:
$ a="~/dev/com/wp-content/plugins/myplugin"
$ echo ${a/dev/staging}
~/staging/com/wp-content/plugins/myplugin
所以像这样的函数:
cdx ()
{
cd "${PWD/$1/$2}"
}
然后执行cdx dev staging
从文件夹切换dev
到staging
.通过一些检查,您可以将该函数命名为cd
:
cd ()
{
if [ $# != 2 ]
then
builtin cd "$@"
else
builtin cd "${PWD/$1/$2}"
fi
}
影响:
~ # cd /tmp
/tmp # cd tmp srv
/srv # cd
~ # cd -
/srv
/srv # cd tmp var
/srv #
cd
除了两个参数之外,这保留了所有情况下的通常行为。
答案2
将此功能添加到您的目录中.bash_profile
,然后键入cdstaging
您将能够在其中的任何目录~/dev
与~/staging
.
当然,您可以将名称更改为您想要的任何名称。此外,您可以创建一个反向函数,只需更改函数名称并"1s@dev@staging@"
使其相反。
cdstaging ()
{
OLDPATH=$(pwd | sed -e "1s@$HOME@~@")
NEWPATH=$(echo $OLDPATH | sed -e "1s@dev@staging@")
cd $NEWPATH
}
答案3
在ksh
或zsh
:
cd dev staging