重複したフォルダー構造内のディレクトリを別のフォルダー構造に変更する簡単な方法はありますか?

重複したフォルダー構造内のディレクトリを別のフォルダー構造に変更する簡単な方法はありますか?

私たちのサーバーには、テスト、ステージング、本番用に、重複したフォルダー構造がいくつかあります。小さな変更を除けば、3 つのフォルダー構造は基本的に同じです。

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 つの引数を除いて、すべてのケースで の通常の動作を保持します。

答え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

関連情報