dizini değiştir (cd) ancak yolun yalnızca bir kısmını değiştirerek


14

Mümkün olup olmadığından emin değilim, ancak eski günlerimden AIX kullanarak hatırlıyorum gibi sadece yolun hangi kısmının başka bir şeyle değiştirilmesi gerektiğini söyleyerek yolumu değiştirmek mümkün oldu. Örneğin, iki yolum olduğunu varsayalım:

/etc/application-2.0.1/options/default

ve

/etc/application-1.0.8/options/default

böyle bir komut kullanarak klasör 1'den 2'ye geçebileceğimi

cd /2.0.1/1.0.8/

yerini alacak olan yolda, dize 2.0.1kadar 1.0.8. Açıkçası bu benim için işe yaramıyor. Ama bunu yapmanın bir yolu var mı?

Yanıtlar:


11

Kabuk olarak zsh kullanırsanız girebilirsiniz cd 1.0.8 2.0.1.


Bu benim için en iyi seçenek gibi görünüyor. Şimdi o şeyi nasıl kuracağına bakıyorum :)
nathanvda

1
sudo apt-get install zsh
koushik

1
RandomMonkey'in yanıtı, Bash'in yerleşik "cd" içindeki tam yol değiştirme işlevine izin verir.
kmarsh

9

Bu ubuntu 10.04 üzerinde bash çalışması gerekir: cd ${PWD/old/new}. Temelde bu ilk geçtiği yerini alır oldsenin içinde mevcut çalışma dizini ile new. Aşağıdaki 2 örnek.

örnek 1

ing02741@hoster:~$ cd /home/ing02741/Videos/
ing02741@hoster:~/Videos$ cd ${PWD/ing02741/koushik}
ing02741@hoster:/home/koushik/Videos$ 

ÖRNEK 2

ing02741@hoster:~/src/cdtest$ mkdir dir-v1.0.1 dir-v2.2.2 dir-v3.0.7
ing02741@hoster:~/src/cdtest$ mkdir dir-v1.0.1/ind dir-v2.2.2/ind dir-v3.0.7/ind
ing02741@hoster:~/src/cdtest$ cd dir-v1.0.1/ind/
ing02741@hoster:~/src/cdtest/dir-v1.0.1/ind$ cd ${PWD/1.0.1/2.2.2}
ing02741@hoster:~/src/cdtest/dir-v2.2.2/ind$ 

Yukarıdaki sepp2k fikrinden ödünç alarak, böyle bir işlev yapabilirsiniz

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

ve sonra mycd 2.0.1 1.0.8geçiş yapmak gibi bir şey kullanın .


1
Bu orada 1/2 yoludur. RandomMonkey'in cevabına bakarsanız, Bash Cd yerleşik içinde tam işlevselliğin mümkün olduğunu göreceksiniz.
kmarsh

8

Bu özelliği kendim kullandım (ve özledim). Kullandığınız * nix'in hangi aromasına ve / veya salımına bağlıdır. Eğer bash kullanıyorsanız, yerleşik cd'yi bu işlevselliği içerecek şekilde genişletmenin kullanışlı bir yolu. Bunu .bashrc'nize koyun (veya test etmek için bash kabuğunuza yapıştırın ve enter tuşuna basın).

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

7

Muhtemelen tarihin genişlediğini hatırlıyorsunuz. AIX'in kabuğunda neyin mevcut olduğunu bilmiyorum, ama bunu bash'da yapmanın bir yolu ^2.0.1^1.0.8.

Güçlü komut satırı düzenlemesi olan bash ve zsh gibi kabuklarda geçmiş genişlemesi daha az kullanışlıdır. Önceki komutları geri çağırmak için ok tuşlarını, önceki komutun son sözcüğünü eklemek için Alt+ tuşlarını kullanabilirsiniz .(bundan önceki komuta ulaşmak için iki kez basın vb.).


Yalnızca eğer ikinci kez girmek basına sahip histverifyseçeneği shoptaçıktır.
sonraki duyuruya kadar duraklatıldı.

@Dennis: teşekkürler, --norctest ederken unutmuştum .
Gilles 'SO- kötü olmayı bırak'

3

Bir vi hayranı iseniz, kabuğunuzda vi modunu etkinleştirebilirsiniz (örneğin bash set -o vi) ve vi komut modunu kullanabilirsiniz.

Ya da çılgın tarih genişlemesi yapabilirsiniz (zsh'ta, belki de bash'da test edilmiştir):

$ 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

Btw, bash'da test etti ve orada da çalışıyor.
maxschlepzig

3
cd `pwd | sed 's/2\.0\.1/1\.0\.8/'`

Ancak bu pek hoş değil. Bir işleve koyarak biraz güzelleştirebilirsiniz:

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

Ve sonra şöyle diyoruz:

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

Yine de noktalardan kaçmanız gerekiyor, ancak eminim bu biraz düşünceyle de çözülebilir.


İkame işleminin sağ tarafındaki noktalardan kaçmanız gerekmez. Çoğu durumda, benzer şekilde adlandırılmış klasörleriniz yoksa, soldaki noktalardan kaçmamak da zararsız olacaktır.
Eylül'de frabjous

3
 ^2.0.1^1.0.8 

Yukarıdaki komut, son komutta 2.0.1 ile 1.0.8 arasında değişiyor, bash'daki çalışması


2

Bu -P|-L|-çalışmayı sağlamak için aşağıdakileri kullanın:

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

1

AIX hakkında emin değilim, ama bunu yönetmekte olduğum Solaris kutularında eski bir Korn kabuk hilesi olarak hatırlıyorum. Örneğinizde, şu komutu yazarsınız:

cd 2.0.1 1.0.8

Biraz daha bilgi burada .


Bu benim için işe yaramadı: ubuntu 10.04, bash "GNU bash, sürüm 4.1.5 (1) -release (i486-pc-linux-gnu)", aşağıdaki komutları denedim: 2048 cd 2049 cd ~ / src / local -ubuntu-yamalar / cdtest / dir-v1.0.9 / gnome-kontrol-merkezi-2.30.1 / capplets / ağ / 2050 cd dir-v1.2.9 dir-v1.0.9 / home / ing02741 / src / local-ubuntu- yamalar / cdtest / dir-v1.2.9 / gnome-control-center-2.30.1 / capplets / network geçerli bir yoldur.
koushik

@koushik: Bunun bir Korn kabuk hilesi olduğunu yazdı. Sen bash kullanıyorsun. bash! = korn. Ubuntu altında ksh 'ksh' paketi üzerinden temin edilebilir.
maxschlepzig

opps, benim hatam. Üzgünüm bunu göz ardı ettim. @maxschlepzig - işaret ettiğiniz için teşekkürler.
koushik
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.