subir a árvore de diretórios mais rápido

2

se eu estiver em um diretório muito profundo a/b/c/d/e/f/g/h/i/j e quiser voltar a/b/c , preciso usar ../../../../../../../ .

Existe comando que posso passar por um número, por ex. cd up 7 , para acelerar esta operação?

    
por Lai Yu-Hsuan 07.03.2012 / 20:14

6 respostas

3

A criação de um alias funcionaria como uma solução temporária, no entanto, se você quiser algo mais permanente que não o confine às suas predefinições, sugiro escrever uma função para fazer isso e incluí-la no arquivo .bashrc.

source

# Go up directory tree X number of directories
function up() {
        COUNTER="$@";
    # default $COUNTER to 1 if it isn't already set
if [[ -z $COUNTER ]]; then
    COUNTER=1
fi
# make sure $COUNTER is a number
if [ $COUNTER -eq $COUNTER 2> /dev/null ]; then
    nwd='pwd' # Set new working directory (nwd) to current directory
    # Loop $nwd up directory tree one at a time
    until [[ $COUNTER -lt 1 ]]; do
        nwd='dirname $nwd'
        let COUNTER-=1
    done
    cd $nwd # change directories to the new working directory
else
    # print usage and return error
    echo "usage: up [NUMBER]"
    return 1
fi
}
    
por Linztm 07.03.2012 / 20:35
3

Se você estiver alternando entre dois diretórios, você pode usar cd - para alternar entre ambos.

Se você quiser marcar alguns diretórios, com os quais provavelmente gravaria com frequência, use pushd e popd - > google para mais informações.

Ou, se você sabe que precisa fazer o cd para o 7º avô com muita frequência, pode criar um alias, como

% bl0ck_qu0te%     
por Mallik 07.03.2012 / 20:24
2

Você pode criar aliases para fazer o trabalho.

% bl0ck_qu0te%

E então você pode simplesmente digitar cd..5 para subir 5 níveis.
Para disponibilizar esses aliases em logins futuros, você pode adicionar o arquivo acima ao arquivo .bash_profile no seu diretório home.

    
por yossile 07.03.2012 / 20:27
2

Você poderia escrever uma função como esta:

up() {
    local path i
    for (( i=0; i < $1; i++ )); do
        path+=../
    done
    cd "$path"
}

Coloque isso no seu ~/.bashrc e, em seguida, você pode executar, e. up 7 para subir 7 diretórios. Você poderia substituir o cd para permitir cd up 7 também, mas apenas fazer um novo comando é mais curto e menos trabalhoso.

    
por geirha 07.03.2012 / 20:33
1

Seja conciso.

alias c1='cd ../'
alias c2='c1; c1'
alias c3='c2; c1'
alias c4='c3; c1'
alias c5='c4; c1'
    
por Steven Xu 07.03.2012 / 23:25
0
function cdl() {

        local arguments;
        local level_string;
        local counter=1;
        # first argument is how many levels you wish to traverse
        local level=$1; 

        # grab any argument after the initial levels you wish to traverse
        for var in "$@"; do
                if [ $counter -gt 1 ]; then
                        arguments="$arguments/$var";
                fi

                counter+=1;
        done

        # build string based on how many levels you want to go up
        if [ $level -gt 1 ]; then
                counter=1;

                while [ $counter -le $level ]; do
                        level_string="../$level_string";
                        let counter+=1;
                done
        fi

        # execute command
        cd $level_string$arguments
}

# Example:
#-----------------
# /usr/local/src/test/directory/blah> cdl 3 i want to be here

ou

# /usr/local/src/test/directory/blah> cdl 3 i/want/to/be/here 

resultado:

# /usr/local/src/i/want/to/be/here> 
#-----------------

É claro que também adiciono aliases no meu arquivo .bashrc usando a função acima

alias cd2='cdl 2'
alias cd3='cdl 3'
alias cd4='cdl 4'
alias cd5='cdl 5'
    
por lima 29.07.2014 / 00:40