有沒有一種簡單的方法可以將目錄從一個重複的資料夾結構更改為另一個?

有沒有一種簡單的方法可以將目錄從一個重複的資料夾結構更改為另一個?

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

當我開發 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

相關內容