Apakah ada perintah untuk mengembalikan sejumlah langkah dalam direktori, tanpa menggunakan cd?

14

Saya akan terus 'cd ../../../../'. Apakah ada perintah / alias yang bisa membiarkan saya pergi 'cmd 4' dan saya akan diambil kembali 4 direktori?

studiohack
sumber
ls? Tentunya maksud Anda cd?
Chris Jester-Young
Ya saya lakukan, saya hanya menulis ini dengan terburu-buru;) Mengeditnya sekarang.
Akankah ini dilakukan ?:alias cmd5 = "cd ../../../../../"
ypercubeᵀᴹ
Yah, saya kira saya bisa menuliskannya sekitar 1 sampai 10 atau lebih, tetapi akan menyenangkan jika memiliki cara yang cerdas untuk melakukannya. Itu tidak benar-benar cocok dengan saya. Akan melakukan itu jika tidak ada solusi lain yang muncul.

Jawaban:

16

Letakkan ini di ~/.bashrc:

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

(Nama tersebut cdupberasal dari perintah FTP yang sesuai, hanya FYI.)

Chris Jester-Young
sumber
Terima kasih atas jawabannya, lanjut dengan jawaban jleedev karena 1 baris lebih pendek dan saya tidak bisa memutuskan siapa yang harus memilih! Bagaimanapun, terima kasih!
@ Muu: Kedua jawaban akan bekerja, tetapi milikku akan bekerja untuk banyak, banyak level, dan @ jleedev hanya akan bekerja untuk segelintir kecil (apa pun batas tumpukannya). ;-) (Saya yakin Anda tidak akan pernah mencapai batasnya, tetapi milik saya lebih umum, adalah apa yang saya coba sampaikan. :-))
Chris Jester-Young
Poin yang adil, saya telah memberi Anda jawabannya. Maaf jleedev - meskipun kemungkinan besar saya akan terus menggunakan solusi Anda karena saya akan lupa untuk mengubahnya :)
11

Saya diajarkan untuk menggunakan 'pushd' dan 'popd' untuk keadaan seperti itu.

Misalnya, ketik 'pushd.' dan kemudian 'cd / home'. Sekarang ketikkan 'popd' dan Anda akan kembali ke tempat Anda memulai.

'pushd' / 'popd' adalah tumpukan, Anda dapat mendorong sebanyak mungkin direktori di sana, tetapi itu adalah yang terakhir aktif, pertama ketika Anda popd.

ʍǝɥʇɐɯ
sumber
Hm, bagus. Tidak pernah mendengarnya. Tidak cukup sesuai dengan apa yang saya cari, tetapi akan menggunakannya juga. Terima kasih.
10

Tentu, mengapa tidak:

atas () {
    [$ # = 0] && cd .. && kembali
    [$ 1 = 0] && kembali
    cd .. && hingga $ (($ 1 - 1))
}
Josh Lee
sumber
Bash tidak ekor-rekursif, bukan? Anda mungkin menumpuk overflow jika Anda melakukannya up 500. :-)
Chris Jester-Young
6
Jika direktori Anda bersarang sebanyak itu, Anda memiliki simpati.
Josh Lee
Digunakan ini. Kalahkan Chris dengan 1 baris;)
@ Muu: Saya tidak tahu pertanyaan ini adalah kode golf! ;-) BTW, ayo bergabung dengan kami! codegolf.stackexchange.com
Chris Jester-Young
3
@ Muu Harap ingat bahwa rekursi bukan cara yang tepat untuk menulis skrip shell secara umum.
Josh Lee
4

Cepat dan kotor:

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

Diformulasikan untuk hanya mengubah direktori sekali.

glenn jackman
sumber
2

Inilah cara alternatif:

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

Anda mungkin ingin melihat ke dalam menggunakan pushddan popdmengatur penanda lokasi dan dan kembali ke sana dengan mudah dari direktori apa pun yang Anda ubah.

Anda juga bisa mengatur variabel dengan nama direktori yang sering Anda gunakan, lalu CD di sana:

MYPROJ=~/projects/name/src
cd $MYPROJ
proj1='cd $MYPROJ'
Caleb
sumber
1

Saya menggunakan autojump yang memungkinkan saya mengetik:

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

itu bisa belajar dari kebiasaan Anda dan sangat ringan (dan membuat ketagihan;))

Cédric Julien
sumber
1

Bangun jalur menggunakan printflalu cduntuk itu:

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

Digunakan sebagai:

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

Dua pemikiran yang mungkin berguna bagi Anda:

  1. cd -
    ubah kembali ke direktori terakhir tempat Anda berada. Saya menggunakan ini sepanjang waktu untuk mendapatkan dari bawah di pohon kode saya kembali ke root ... meskipun itu hanya bekerja jika Anda cd turun ke dalamnya dalam satu perubahan.

  2. cdd lama baru
    ini adalah fungsi skrip yang saya tulis di masa lalu yang saya gunakan untuk bergerak di antara pohon-pohon serupa. Pada dasarnya butuh dua argumen dan melakukan regexp di jalan Anda, bagus untuk bergerak di antara cabang dan semacamnya. Sebagai contoh jika Anda berada di ~ / bzr / web / trunk / path / ke / fitur dan diperlukan untuk mendapatkan ~ / bzr / web / fitur-branch / path / ke / fitur maka Anda akan melakukannya cdd trunk feature-branch. Implementasi yang saya miliki dalam bahasa shell kuno pada AIX, tapi itu cukup sepele, jadi harus mudah diimplementasikan dalam shell pilihan jika Anda membutuhkannya. Bagi kami itu sangat berguna karena strukturnya terlihat seperti: ... / {produk} / {versi} / {rilis} / {src, bld, dbg, pkg, tst} / {komponen} / ... jadi bergeraklah di pohon itu menjadi gila cukup cepat.

taksi
sumber