
私たちのサーバーには、テスト、ステージング、本番用に、重複したフォルダー構造がいくつかあります。小さな変更を除けば、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
のフォルダから に切り替えます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 つの引数を除いて、すべてのケースで の通常の動作を保持します。
答え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