Bir dizinde cd kullanmadan birkaç adım geri gitme komutu var mı?


14

Sürekli 'cd ../../../../' a gidiyorum. 'Cmd 4' gitmeme izin verebilecek bir komut / takma ad var mı ve 4 dizin geri alınabilir mi?


ls? Kesinlikle demek istiyorsun cd?
Chris Jester-Young

Evet, sadece bir acele yazdım;) Şimdi düzenleme.

alias cmd5 = "cd ../../../../../"
Wiil

Sanırım onları 1 ila 10 kadar yazabilirim, ama bunu yapmanın akıllıca bir yoluna sahip olmak güzel olurdu. Bu benimle doğru oturmuyor. Yine de başka bir çözüm ortaya çıkmazsa bunu yapacaktır.

Yanıtlar:


16

Bunu şuna ekle ~/.bashrc:

cdup() {
  levels=${1-1}
  while ((levels--)); do
    cd ..
  done
}

(Ad cdup, karşılık gelen FTP komutundan gelir, sadece FYI.)


Yanıt için teşekkürler, jleedev'in 1 satır daha kısa olması nedeniyle cevap verdi ve kim seçmek için karar veremedim! Yine de teşekkürler!

@Muu: Her iki cevap da işe yarayacak, ancak benimki birçok, birçok seviye için çalışacak ve @ jleedev'in sadece küçük bir avuç için (yığın sınırı ne olursa olsun) çalışacak. ;-) (Eminim hiçbir şekilde sınıra ulaşmazsınız, ama benimki daha genel, almaya çalıştığım şey bu. :-))
Chris Jester-Young

Adil nokta, o zaman size cevabı verdim. Üzgünüz jleedev - büyük olasılıkla değiştirmeyi unutacağım için çözümünüzü kullanmaya devam edeceğim :)

11

Bu tür durumlar için bana 'pushd' ve 'popd' kullanmam öğretildi.

Örneğin, 'pushd' yazın. ve sonra 'cd / home'. Şimdi 'popd' yazın ve başladığınız yere geri döneceksiniz.

'pushd' / 'popd' bir yığıntır, orada istediğiniz sayıda dizini itebilirsiniz, ancak ilk önce popd zaman kapalıdır.


Hm, güzel. Bunu duymadım. Aradığım şeylere tam olarak uymuyor, ama bunu da kullanacak. Teşekkürler.

10

Tabii neden olmasın:

yukarı () {
    [$ # = 0] && cd .. && dönüş
    [$ 1 = 0] && iade
    cd .. && up $ ((1 - 1 $))
}

Bash kuyruk yinelemeli değil, değil mi? Bunu yaparsanız taşmayı isteyebilirsiniz up 500. :-)
Chris Jester-Young

6
Dizinleriniz bu kadar derinlere yuvalanmışsa, benim sempatilerim vardır.
Josh Lee

Bunu kullandım. Chris'i 1 satırla yendi;)

@Muu: Bu sorunun golf için bir kod olduğunu bilmiyordum! ;-) BTW, gel bize katıl! codegolf.stackexchange.com
Chris Jester-Young

3
@Muu Lütfen, yinelemenin genel olarak kabuk komut dosyaları yazmak için uygun bir yol olmadığını unutmayın .
Josh Lee

4

Hızlı ve kirli:

cmd () { dir=.; for i in $(seq 1 $1); do dir=$dir/..; done; pushd $dir; }

Dizini yalnızca bir kez değiştirmek üzere formüle edilmiştir.


2

İşte alternatif bir yol:

function cdup
{
    cd $(for ((i=0 ; i<$1 ;i++)); do printf "../" ; done)
}

1

Konum işaretleyicilerini kullanarak pushdve popdayarlamak ve değiştirdiğiniz dizinden kolayca geri dönmek isteyebilirsiniz.

Ayrıca, çok kullandığınız bir dizinin adıyla bir değişken ayarlayabilir, ardından oradaki CD'yi ayarlayabilirsiniz:

MYPROJ=~/projects/name/src
cd $MYPROJ
proj1='cd $MYPROJ'

1

Yazmamı sağlayan autojump kullanıyorum :

j h
>> /home/cjulien
j et
>> /etc

alışkanlıklarınızdan öğrenebilir ve çok hafif (ve bağımlılık yapıcı;))


1

Yolunu printfdaha sonra kullanarak oluşturun cd:

cdup() {
    local path
    printf -v path '%*s' "${1:-1}"
    cd "${path// /../}"
}

Kullanım şekli:

cdup 4 # to go up four directories
cdup 1 # to explicitly go up one directory
cdup   # to implicitly go up one

0

Sizin için yararlı olabilecek iki düşünce:

  1. Cd -
    bulunduğunuz son dizine geri dönün. Kod ağacımın derinliklerinden köküne geri dönmek için bunu her zaman kullanıyorum ... ancak bu sadece bir tanesinde cd'derseniz çalışır değişiklik.

  2. cdd old new
    Bu, geçmişte yazdığım ve benzer ağaçların arasında dolaşmak için kullandığım bir komut dosyası işleviydi . Temelde iki argüman aldı ve yolunuzda, dallar ve benzerleri arasında dolaşmak için harika bir regexp yaptı. Örneğin, ~ / bzr / web / trunk / path / to / feature içindeyseniz ve ~ / bzr / web / feature-branch / path / to / feature için gerekli olsaydınız bunu yapardınız cdd trunk feature-branch. Sahip olduğum uygulama AIX üzerinde arkaik bir kabuk dilindeydi, ancak oldukça önemsizdi, bu yüzden ihtiyacınız varsa seçim kabuğunda uygulamak kolay olmalı. Bizim için çok yararlıydı çünkü yapı şöyle görünüyordu: ... / {product} / {version} / {release} / {src, bld, dbg, pkg, tst} / {bileşen} / ... o ağaçta çok çabuk delirdi.

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.