Có một lệnh để quay trở lại một số bước trong một thư mục, mà không sử dụng cd?


14

Tôi liên tục đi 'cd ../../../../'. Có một lệnh / bí danh nào có thể cho phép tôi đi 'cmd 4' và tôi sẽ được lấy lại 4 thư mục?


ls? Chắc chắn là bạn có ý nghĩa cd?
Chris Jester-Young

Vâng tôi làm, tôi chỉ viết điều này vội vàng;) Chỉnh sửa nó ngay bây giờ.

Wiil này làm gì?:alias cmd5 = "cd ../../../../../"
ypercubeᵀᴹ

Chà, tôi cho rằng tôi có thể viết chúng ra từ 1 đến 10 hoặc lâu hơn, nhưng thật tuyệt khi có cách làm thông minh. Điều đó không thực sự ngồi đúng với tôi. Sẽ làm điều đó nếu không có giải pháp khác nổi lên, mặc dù.

Câu trả lời:


16

Đặt cái này trong ~/.bashrc:

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

(Tên cdupxuất phát từ lệnh FTP tương ứng, chỉ FYI.)


Cảm ơn câu trả lời, đã đi với câu trả lời của jleedev do nó ngắn hơn 1 dòng và tôi không thể quyết định ai sẽ chọn! Dẫu sao cũng xin cảm ơn!

@Muu: Cả hai câu trả lời sẽ hoạt động, nhưng câu trả lời của tôi sẽ hoạt động cho nhiều, nhiều cấp độ và @ jleedev sẽ chỉ hoạt động trong một số ít (bất kể giới hạn ngăn xếp là gì). ;-) (tôi chắc chắn rằng bạn sẽ không bao giờ đạt giới hạn một trong hai cách, nhưng tôi là tổng quát hơn, là những gì tôi đang cố gắng để có được ít :-).)
Chris Jester-Young

Điểm công bằng, tôi đã trao cho bạn câu trả lời sau đó. Xin lỗi jleedev - mặc dù rất có thể tôi sẽ tiếp tục sử dụng giải pháp của bạn vì tôi sẽ quên thay đổi nó :)

11

Tôi được dạy sử dụng 'Pushd' và 'popd' cho những trường hợp như vậy.

Ví dụ: nhập 'đẩy.' và sau đó 'cd / home'. Bây giờ gõ 'popd' và bạn sẽ trở lại nơi bạn đã bắt đầu.

'Pushd' / 'popd' là một ngăn xếp, bạn có thể đẩy bao nhiêu thư mục trên đó tùy thích, nhưng nó là lần cuối, trước hết là khi bạn bật.


Hừm, đẹp quá. Không nghe nói về điều đó. Không hoàn toàn phù hợp với những gì tôi đang tìm kiếm, nhưng cũng sẽ sử dụng nó. Cảm ơn.

10

Chắc chắn, tại sao không:

lên() {
    [$ # = 0] && cd .. && trả lại
    [$ 1 = 0] && trả lại
    cd .. && tăng $ (($ 1 - 1))
}

Bash không đệ quy đuôi, phải không? Bạn có thể chồng tràn nếu bạn làm up 500. :-)
Chris Jester-Young

6
Nếu thư mục của bạn được lồng vào đó sâu sắc, bạn có cảm tình của tôi.
Josh Lee

Đã sử dụng cái này. Đánh bại Chris bằng 1 dòng;)

@Muu: Tôi không biết câu hỏi này là một môn đánh gôn! ;-) BTW, hãy tham gia với chúng tôi! codegolf.stackexchange.com
Chris Jester-Young

3
@Muu Xin nhớ rằng đệ quy không phải là cách thích hợp để viết shell script nói chung.
Josh Lee

4

Nhanh chóng và hèn hạ:

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

Công thức chỉ thay đổi thư mục một lần.


2

Đây là một cách khác:

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

1

Bạn có thể muốn xem xét việc sử dụng pushdpopdđặt các điểm đánh dấu vị trí và dễ dàng quay lại đó từ bất kỳ thư mục nào bạn đã thay đổi.

Bạn cũng có thể đặt một biến với tên của một thư mục bạn sử dụng nhiều, sau đó CD ở đó:

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

1

Tôi sử dụng autojump cho phép tôi gõ:

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

nó có thể học hỏi từ thói quen của bạn và rất nhẹ (và gây nghiện;))


1

Xây dựng con đường sử dụng printfsau đó cdvới nó:

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

Sử dụng như là:

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

0

Hai suy nghĩ có thể có ích cho bạn:

  1. cd -
    thay đổi trở lại thư mục cuối cùng mà bạn đang ở. Tôi sử dụng tất cả thời gian để đi sâu từ cây mã của tôi trở lại thư mục gốc của nó ... mặc dù điều đó chỉ hoạt động nếu bạn đưa nó vào trong một thay đổi.

  2. cdd cũ mới
    đây là một chức năng kịch bản mà tôi đã viết trong quá khứ mà tôi đã sử dụng để di chuyển giữa các cây tương tự. Về cơ bản, nó đã có hai đối số và thực hiện một biểu thức chính trên đường đi của bạn, rất tốt cho việc di chuyển giữa các nhánh và như vậy. Ví dụ: nếu bạn đã ở ~ / bzr / web / trunk / path / to / Feature và cần đến ~ / bzr / web / Feature-Branch / path / to / Feature thì bạn sẽ làm cdd trunk feature-branch. Việc triển khai tôi đã có trong một ngôn ngữ shell cổ xưa trên AIX, nhưng nó khá tầm thường, vì vậy nên dễ dàng thực hiện trong shell của sự lựa chọn nếu bạn cần nó. Đối với chúng tôi, nó rất hữu ích vì cấu trúc trông như: ... / {sản phẩm} / {phiên bản} / {phát hành} / {src, bld, dbg, pkg, tst} / {thành phần} / ... vì vậy di chuyển xung quanh trong cái cây đó đã mất trí khá nhanh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.