Есть ли простой способ сменить каталоги из одной структуры дубликатов папок в другую?

На нашем сервере у нас есть несколько структурных папок дубликатов для тестирования, постановки и производства. Помимо незначительных изменений, структура папок между всеми тремя, как правило, одинакова.

Когда я работаю над плагином WordPress, я глубоко в структуре папок разработки (ex ~/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 и попросить команду пропустить новый каталог, используя мой текущий путь к каталогу. Очевидно, что если новая папка не содержит правильной структуры, она будет ошибочной.

Я застрял, набрав всю структуру каталогов? Или есть лучший способ?

Используйте замену строк в 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 во всех случаях, за исключением двух аргументов.

Добавьте эту функцию в свой .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 } 

В ksh или zsh :

 cd dev staging