Gibt es eine einfache Möglichkeit, Verzeichnisse innerhalb einer doppelten Ordnerstruktur in eine andere zu ändern?

Gibt es eine einfache Möglichkeit, Verzeichnisse innerhalb einer doppelten Ordnerstruktur in eine andere zu ändern?

Auf unserem Server haben wir mehrere doppelte Ordnerstrukturen für Tests, Staging und Produktion. Abgesehen von geringfügigen Änderungen ist die Ordnerstruktur bei allen drei im Allgemeinen gleich.

Wenn ich an einem WordPress-Plugin arbeite, befinde ich mich tief in der Entwicklungsordnerstruktur (z. B. ~/dev/com/wp-content/plugins/myplugin). Ich weiß, dass es das ~/staging/com/wp-content/plugins/myplugingibt.

Wenn mein aktuelles Arbeitsverzeichnis ist ~/dev/com/wp-content/plugins/myplugin, kann ich dann irgendwie einfach zu wechseln~/staging/com/wp-content/plugins/myplugin ohnedie gesamte Verzeichnisstruktur eintippen?

Ich würde gerne etwas schreiben wiecdx~/staging, oder auchcdx../../../../../stagingund lassen Sie den Befehl versuchen, das neue Verzeichnis unter Verwendung meines aktuellen Verzeichnispfads zu durchsuchen. Wenn der neue Ordner nicht die richtige Struktur aufweist, tritt natürlich ein Fehler auf.

Muss ich die gesamte Verzeichnisstruktur eintippen? Oder gibt es einen besseren Weg?

Antwort1

Verwenden Sie die Zeichenfolgenersetzung in bash:

$ a="~/dev/com/wp-content/plugins/myplugin"
$ echo ${a/dev/staging}
~/staging/com/wp-content/plugins/myplugin

Also eine Funktion wie:

cdx () 
{
    cd "${PWD/$1/$2}"
}

Und dann cdx dev stagingwechseln Sie von einem Ordner in devzu staging. Mit ein paar Überprüfungen können Sie die Funktion benennen cd:

cd ()
{
    if [ $# != 2 ]
    then
        builtin cd "$@"
    else
        builtin cd "${PWD/$1/$2}"
    fi
}

Wirkung:

~ # cd /tmp
/tmp # cd tmp srv
/srv # cd
~ # cd -
/srv
/srv # cd tmp var
/srv #

Dadurch wird das übliche Verhalten cdin allen Fällen beibehalten, mit Ausnahme von zwei Argumenten.

Antwort2

Fügen Sie diese Funktion zu Ihrer hinzu .bash_profile, und durch Eingabe cdstagingkönnen Sie zwischen jedem Verzeichnis darin ~/devund dem entsprechenden Verzeichnis wechseln ~/staging.

Natürlich können Sie den Namen beliebig ändern. Darüber hinaus können Sie eine umgekehrte Funktion erstellen, indem Sie einfach den Funktionsnamen "1s@dev@staging@"in das Gegenteil ändern.

cdstaging ()
{
        OLDPATH=$(pwd | sed -e "1s@$HOME@~@")
        NEWPATH=$(echo $OLDPATH | sed -e "1s@dev@staging@")
        cd $NEWPATH
}

Antwort3

In kshoder zsh:

cd dev staging

verwandte Informationen