
在我們的伺服器上,我們有幾個重複的資料夾結構用於測試、暫存和生產。除了細微的變化之外,這三個之間的資料夾結構通常是相同的。
當我開發 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