2012-08-30 31 views
31

Khi tôi muốn đi tới thư mục trên tôi sử dụngTới vài thư mục trong linux

cd ..

Nhưng khi tôi muốn đi 7 thư mục lên là có cách nào để làm điều này không phải là chỉ cần gõ bảy (7) lần cd ..?

+0

Trên một lưu ý phụ, đi một cấp lên cả 'cd..' và' cd ..' tương đương trong cửa sổ nhưng linux quá nghiêm ngặt và từ chối lệnh 'cd..' làm lệnh không hợp lệ chỉ vì thiếu dung lượng . – RBT

Trả lời

48
cd ../../../../../../../ 

Ngoài ra một hướng mẹo hữu ích là nếu ví dụ cho phép nói rằng bạn giữ cho chuyển đổi từ một thư mục (gọi nó là A) khác (gọi nó là B) đó là 7 thư mục, trong trường hợp của bạn.

Vì vậy, nếu bạn đang ở trong thư mục A:.

A> cd ../../../../../../../ 
B> // Now you're in directory B and want to go back to A 
B> cd - 

Điều đó sẽ di chuyển trở lại đúng vào thư mục A. - mở rộng vào thư mục trước đó bạn đang ở

+3

Lệnh 'cd -' rất thú vị. Có cửa sổ nào tương đương với nhau không? – RBT

+0

Mặc dù đây là câu trả lời "được chấp nhận", tôi thấy câu trả lời của @ dav dưới đây là giải pháp mạnh mẽ hơn. Một danh sách dài "../" vừa nguy hiểm vừa dễ bị lỗi. Nếu hồ sơ của bạn cho phép một tập lệnh bí danh, nó có thể mở rộng hơn. Phiên bản bí danh bash cũng duy trì hỗ trợ cho "cd -". – ZaydH

5

Bạn có thể làm điều đó như thế này cd ../../../../../../../

Có một cool article về một số hacks bạn có thể áp dụng để cải thiện bạn điều hướng.

1

Hm, tôi không nghĩ như vậy.

Nhưng bạn có thể viết cd ../../../.. (và vân vân) thay vì 7 lần cd ..

3
for i in {1..7}; do cd ..; done 
7

bạn có thể sử dụng pushd . để nhớ một thư mục và popd để quay lại thư mục đó.

6

Nếu có lệnh tôi sử dụng nhiều, tôi sẽ chỉ tạo bí danh.

Bạn có thể gõ

alias ..='cd ..' 
alias ...='cd ../..' 

Sau đó, bạn chỉ có thể sử dụng .. đi một bậc lên và ... đi hai cấp độ lên.

6

Đây là một cải tiến nhỏ mà tôi đã tìm thấy:

Thông thường, khi bạn quay trở lại một thư mục có cd .., bạn sẽ chuyển tiếp một thư mục sau đó. Để thực hiện việc này, bạn phải sử dụng chức năng chứ không phải là bí danh, vì vậy thay vì:

alias ..=”cd ../” 
alias ..2=”cd ../../” 

bạn có thể sử dụng:

..() 
{ 
cd ../[email protected] 
} 
..2() 
{ 
cd ../../[email protected] 
} 

Tuy nhiên, sau khi sử dụng này, nó nhanh chóng trở nên rõ ràng rằng bạn đang thiếu hoàn thành lệnh cho chức năng này, làm cho nó ít hữu ích hơn nó có thể được. Vì vậy, tôi đã quay lại và thêm các hàm bash hoàn thành của riêng mình cho hàm này, có thể dán vào ~/.bashrc của bạn hoặc bất kỳ tệp nào (ví dụ ~/.bash_completion) được gọi từ ~/.bashrc của bạn nếu bạn muốn tránh lộn xộn. Đây là mã hoàn thành:

_..() 
{ 
local cur=../${COMP_WORDS[COMP_CWORD]} 
COMPREPLY=($(compgen -d — $cur)) 
local i=${#COMPREPLY[*]} 
while [ $((--i)) -ge 0 ]; do 
COMPREPLY[$i]=$(echo ${COMPREPLY[$i]} | sed -r ‘s/(\.\.\/)*//’) 
done 
} 
complete -F _.. -o nospace -S/.. 

_..2() 
{ 
local cur=../../${COMP_WORDS[COMP_CWORD]} 
COMPREPLY=($(compgen -d — $cur)) 
local i=${#COMPREPLY[*]} 
while [ $((--i)) -ge 0 ]; do 
COMPREPLY[$i]=$(echo ${COMPREPLY[$i]} | sed -r ‘s/(\.\.\/)*//’) 
done 
} 
complete -F _..2 -o nospace -S/..2 
14

Đặt bí danh (trong bạn ~ /.bashrc)

function cd_up() { 
    cd $(printf "%0.0s../" $(seq 1 $1)); 
} 
alias 'cd..'='cd_up' 

và sử dụng:

$ cd.. 7 

UPD: Hoặc làm cho biến thể mạnh hơn, cd để dir tên trong đường dẫn hiện tại:

# cd up to n dirs 
# using: cd.. 10 cd.. dir 
function cd_up() { 
    case $1 in 
    *[!0-9]*)           # if no a number 
     cd $(pwd | sed -r "s|(.*/$1[^/]*/).*|\1|")  # search dir_name in current path, if found - cd to it 
     ;;            # if not found - not cd 
    *) 
     cd $(printf "%0.0s../" $(seq 1 $1));    # cd ../../../../ (N dirs) 
    ;; 
    esac 
} 
alias 'cd..'='cd_up'        # can not name function 'cd..' 

sử dụng:

$ cd /home/user/documents/projects/reports/2014-10-01 
$ cd.. proj 
$ pwd 
> /home/user/documents/projects 
0

Bạn có thể thử giải pháp này. Đó là một công việc tốt cho tôi:

#!/bin/bash 
 

 
#this sctipt should take one parameter - number of steps. And do "cd" command step times. 
 
# example usage: cd `cde 3` 
 

 
NEW_PATH=$(pwd) 
 

 
step="../" 
 

 
upper="" 
 

 
for i in seq $1 
 
do 
 
     upper="$upper$step" 
 
done 
 

 
echo $upper

Tôi đã thực hiện bí danh trong ~/file .barsh. Và công việc này tốt cho tôi.
Ví dụ, tối đa ba thư mục.
$ cd 'CDE 3`

2

Bạn có thể thêm các chức năng sau đây để .bashrc của bạn:

# ~/.bashrc 
up() { 
    for D in $(seq 1 $1); 
    do 
     cd .. 
    done 
} 

Vì vậy, việc sử dụng sẽ chỉ đơn giản là:

user ~ $ up 3 
user/$ 
+0

câu trả lời hay nhất để sử dụng lâu dài – Kyle

+0

Bao gồm "và" dường như không hoạt động. Tôi đã làm cho nó hoạt động bằng cách xóa "và". Cách tiếp cận từ @dav bên dưới cho phép "cd -" vẫn hoạt động nên tôi sẽ nói đó là câu trả lời dài hạn tốt hơn. – ZaydH

4

Không nhớ từ nơi tôi sao chép chức năng này, nhưng nó hoạt động tốt cho tôi (bạn có thể đặt trong ví dụ .bashrc)

up() { local p= i=${1:-1}; while ((i--)); do p+=../; done; cd "$p$2" && pwd; }

ví dụ: để đi 7 thư mục, cần phải nhập up 7

1

Chức năng tiện lợi này hỗ trợ theo cả hai hướng.

Nếu bạn đang ở trong /a/b/c/d rồi 'lên 1' sẽ đưa bạn đến /a/b/c, và vân vân. Đó là tiêu chuẩn khá và được bao phủ trong hầu hết các câu trả lời khác.

Bây giờ, đối với phần đặc biệt; sử dụng các số âm sẽ đưa bạn lên từ hướng khác. Vì vậy, nếu bạn đang ở trong /a/b/c/d, 'lên -1' sẽ đưa bạn đến /a, v.v.

function up() { 
    UP=$1 

    if [[ $UP =~ ^[\-0-9]+$ ]]; then 
     if ((UP<0)); then 
      UP=${UP#-} 
      cd $(echo $PWD | cut -d/ -f1-$((UP+1))) 
     else 
      cd $(printf "%0.s../" $(seq 1 ${UP})); 
     fi 
    fi 
} 

Có sẵn để tải xuống/cài đặt trên github.

1

cho người dùng cá,

function cdd 
    for x in (seq $argv) 
    cd .. 
    end 
end 

và lưu nó vào bạn: ~/.config/cá/chức năng/cdd.fish

và chỉ $ cdd 3 Để đi lên 3 thư mục.

+1

Tôi đã sửa đổi chức năng sao cho nó chỉ gọi cd một lần. Điều này bảo toàn khả năng của 'cd -' để nhảy trở lại thư mục trước đó. –

Các vấn đề liên quan