web-dev-qa-db-fra.com

grimper plus rapidement dans l'arborescence des répertoires

si je suis dans un répertoire très profond a/b/c/d/e/f/g/h/i/j et je veux revenir a/b/c, Je dois utiliser ../../../../../../../.

Y a-t-il une commande que je peux passer à travers un nombre, par exemple cd up 7, pour accélérer cette opération?

2
Lai Yu-Hsuan

La création d'un alias fonctionnerait comme une solution temporaire, cependant si vous voulez quelque chose de plus permanent qui ne vous limite pas à vos préréglages, je suggère d'écrire une fonction pour le faire et de l'inclure dans votre fichier .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
}
3
Linztm

Si vous basculez entre 2 répertoires, vous pouvez utiliser cd - pour basculer entre les deux.

Si vous souhaitez mettre en signet quelques répertoires, que vous feriez probablement sur CD souvent, utilisez pushd et popd -> google pour plus d'informations.

Ou, si vous savez que vous devez souvent passer au 7e grand-parent, vous pouvez créer un alias, comme

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

3
Mallik

Vous pouvez créer des alias pour effectuer le travail.

alias cd..2 = "cd ../ .."
alias cd..3 = "cd ../../ .."
alias cd..4 = "cd ../../../ .."
alias cd..5 = "cd ../../../../ .."

Et puis vous pouvez simplement taper cd..5 pour remonter de 5 niveaux.
Pour rendre ces alias disponibles dans les futures connexions, vous pouvez ajouter ce qui précède au fichier .bash_profile dans votre répertoire personnel.

2
yossile

Vous pouvez écrire une fonction comme celle-ci:

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

Mettez ça dans votre ~/.bashrc, alors vous pouvez exécuter par exemple up 7 pour remonter 7 répertoires. Vous pouvez remplacer cd pour autoriser cd up 7 aussi, mais le simple fait de créer une nouvelle commande est plus court et moins compliqué.

2
geirha

Soyez concis.

alias c1='cd ../'
alias c2='c1; c1'
alias c3='c2; c1'
alias c4='c3; c1'
alias c5='c4; c1'
1
Steven
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 

résultat:

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

Bien sûr, j'ajoute également des alias dans mon .bashrc fichier utilisant la fonction ci-dessus

alias cd2='cdl 2'
alias cd3='cdl 3'
alias cd4='cdl 4'
alias cd5='cdl 5'
0
lima