有没有一种简单的方法可以将目录从一个重复的文件夹结构更改为另一个?

有没有一种简单的方法可以将目录从一个重复的文件夹结构更改为另一个?

在我们的服务器上,我们有几个重复的文件夹结构用于测试、暂存和生产。除了细微的变化之外,这三个之间的文件夹结构通常是相同的。

当我开发 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从文件夹切换devstaging.通过一些检查,您可以将该函数命名为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

kshzsh

cd dev staging

相关内容