it-swarm.com.de

Ändern Sie das Verzeichnis (cd), indem Sie nur einen Teil des Pfads ersetzen

Ich bin mir nicht sicher, ob es möglich ist, aber ich erinnere mich an meine alten Zeiten mit AIX. Es war möglich, meinen Pfad zu ändern, indem ich nur sagte, welcher Teil des Pfades durch etwas anderes ersetzt werden musste. Angenommen, ich habe zwei Pfade:

/etc/application-2.0.1/options/default

und

/etc/application-1.0.8/options/default

dass ich von Ordner 1 nach 2 mit einem Befehl wie wechseln könnte

cd /2.0.1/1.0.8/

dies würde im Pfad die Zeichenfolge 2.0.1 bis 1.0.8 ersetzen. Offensichtlich funktioniert das jetzt bei mir nicht. Aber gibt es einen Weg, dies zu tun?

14
nathanvda

Wenn Sie zsh als Shell verwenden, können Sie einfach cd 1.0.8 2.0.1 eingeben.

10
qbi

Dies sollte in Bash auf Ubuntu 10.04 funktionieren: cd ${PWD/old/new}. Grundsätzlich ersetzt dies das erste Vorkommen von old in Ihrem aktuelles Arbeitsverzeichnis durch new. 2 Beispiele unten.

Beispiel 1

[email protected]:~$ cd /home/ing02741/Videos/
[email protected]:~/Videos$ cd ${PWD/ing02741/koushik}
[email protected]:/home/koushik/Videos$ 

Beispiel 2

[email protected]:~/src/cdtest$ mkdir dir-v1.0.1 dir-v2.2.2 dir-v3.0.7
[email protected]:~/src/cdtest$ mkdir dir-v1.0.1/ind dir-v2.2.2/ind dir-v3.0.7/ind
[email protected]:~/src/cdtest$ cd dir-v1.0.1/ind/
[email protected]:~/src/cdtest/dir-v1.0.1/ind$ cd ${PWD/1.0.1/2.2.2}
[email protected]:~/src/cdtest/dir-v2.2.2/ind$ 

Ausgehend von der obigen Idee von sepp2k könnten Sie eine Funktion wie diese erstellen

function mycd { cd ${PWD/$1/$2} }

und dann etwas wie mycd 2.0.1 1.0.8 zum Umschalten verwenden.

9
koushik

Ich habe diese Funktion selbst verwendet (und verpasst). Es hängt davon ab, welches Aroma und/oder welche Version von * nix Sie verwenden. Wenn Sie bash verwenden, ist dies eine praktische Möglichkeit, die eingebaute CD um diese Funktionalität zu erweitern. Fügen Sie dies in Ihre .bashrc-Datei ein (oder fügen Sie es zum Testen in Ihre Bash-Shell ein und drücken Sie die Eingabetaste).

function cd() { if [ $# -eq 2 ]; then builtin cd ${PWD/$1/$2}; else builtin cd $1; fi }
8
RandomMonkey

Sie erinnern sich wahrscheinlich an die Erweiterung der Geschichte. Ich weiß nicht, was in Ihrer Shell unter AIX verfügbar war, aber eine Möglichkeit, dies in Bash zu tun, ist ^2.0.1^1.0.8.

Die Verlaufserweiterung ist bei Shells wie bash und zsh mit leistungsstarker Befehlszeilenbearbeitung weniger nützlich. Mit den Pfeiltasten können Sie frühere Befehle aufrufen und Alt+. um das letzte Wort des vorherigen Befehls einzufügen (zweimal drücken, um den Befehl davor zu erreichen und so weiter).

7
Gilles

Wenn Sie ein vi-Fan sind, können Sie den vi-Modus in Ihrer Shell aktivieren (z. B. bash set -o vi) und den Befehlsmodus von vi ...

Oder Sie könnten eine verrückte Geschichtserweiterung durchführen (getestet in zsh, vielleicht auch in bash):

$ cd /etc/application-1.0.8/options/default
cd: no such file or directory: /etc/application-1.0.8/options/default

$ !!:s/1.0.8/2.0.1/
cd /etc/application-2.0.1/options/default
cd: no such file or directory: /etc/application-2.0.1/options/default
3
maxschlepzig
cd `pwd | sed 's/2\.0\.1/1\.0\.8/'`

Dies ist jedoch nicht sehr hübsch. Sie können es ein wenig aufbessern, indem Sie es in eine Funktion einfügen:

function mycd { cd `pwd | sed s$1` }

Und dann heißt es so:

mycd '/2\.0\.1/1.0.8/'

Sie müssen den Punkten trotzdem entkommen, aber ich bin sicher, dass dies auch mit ein wenig Nachdenken umgangen werden kann.

3
sepp2k
 ^2.0.1^1.0.8 

Der obige Befehl tauscht 2.0.1 gegen 1.0.8 im letzten Befehl, seine Arbeit in der Bash

3
SergioAraujo

Um sicherzustellen, dass -P|-L|- funktioniert, verwenden Sie Folgendes:

function cd () {
    typeset arg=
    case $1 in -|-L|-P) arg=$1 ; shift ;; esac
    [ $# -gt 1 ] && {
        builtin cd $arg "${PWD/$1/$2}"
    } || {
        builtin cd $arg "[email protected]"
    }
}
2
Brett Ryan

Ich bin mir bei AIX nicht sicher, erinnere mich aber an einen alten Korn-Shell-Trick für die Solaris-Boxen, die ich früher verwaltet habe. In Ihrem Beispiel geben Sie den folgenden Befehl ein:

cd 2.0.1 1.0.8

Noch ein paar Infos hier .

1
Trieu