web-dev-qa-db-fra.com

Monter plusieurs répertoires sous linux

Quand je veux aller d'un répertoire, j'utilise

cd ..

Mais quand je veux aller 7 répertoires vers le haut, y at-il un moyen de faire cela autre que de taper sept (7) fois cd ..?

cd ../../../../../../../

Un autre conseil de navigation utile est par exemple si, par exemple, vous laissez passer sans cesse d'un répertoire (appelez-le A) à un autre (appelez-le B) comportant 7 répertoires en place, dans votre cas. 

Donc si vous êtes dans le répertoire A:

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

Cela vous ramènera directement au répertoire A. - se développera au répertoire précédent dans lequel vous vous trouviez. 

53
Florin Stingaciu

Faire un alias (dans vous ~/.bashrc)

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

et utilise:

$ cd.. 7

UPD: Ou créer une variante plus puissante, cd au nom du répertoire dans le chemin actuel:

# 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..'

utilisation:

$ cd /home/user/documents/projects/reports/2014-10-01
$ cd.. doc
$ pwd
> /home/user/documents
15
Grigory K

vous pouvez utiliser pushd . pour mémoriser un répertoire et popd pour y revenir.

8
Chakalaka

S'il y a une commande que j'utilise beaucoup, je vais juste faire un alias.

Vous pouvez taper

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

Ensuite, vous pouvez simplement utiliser .. pour monter d'un niveau et ... pour en monter deux.

Voici une légère amélioration que j'ai trouvée:

Habituellement, lorsque vous revenez dans un répertoire avec cd .., vous finissez par parcourir un répertoire après. Pour que cela fonctionne, vous devez utiliser des fonctions plutôt que des alias, donc au lieu de:

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

vous pouvez utiliser:

..()
{
cd ../$@
}
..2()
{
cd ../../$@
}

Cependant, après avoir utilisé cela, il devient rapidement évident que vous manquez la complétion de commande pour cette fonction, ce qui la rend beaucoup moins utile qu'elle pourrait l'être. Ainsi, je suis retourné et j'ai ajouté mes propres fonctions d'achèvement de bash pour cette fonction, qui peuvent être collées dans votre ~/.bashrc ou n'importe quel fichier (par exemple, ~/.bash_completion) appelé depuis votre ~/.bashrc si vous souhaitez éviter désordre. Voici le code d'achèvement:

_..()
{
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
6
RussellStewart

Vous pouvez le faire comme ceci cd ../../../../../../../

Il existe un article cool sur certains hacks que vous pouvez appliquer pour améliorer votre navigation.

5
Maksim Skurydzin
for i in {1..7}; do cd ..; done
3
Waleed Khan

Vous pouvez ajouter la fonction suivante à votre .bashrc:

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

Donc, l'utilisation serait simplement:

user ~ $ up 3
user / $
2
doberoi96

Cette fonction astucieuse permet de monter dans les deux sens. 

Si vous êtes dans / a/b/c/d, alors «up 1» vous mènera à / a/b/c, etc. C'est assez standard et couvert dans la plupart des autres réponses.

Maintenant, pour la partie spéciale; utiliser des nombres négatifs vous fait monter de l’autre direction. Donc, si vous êtes dans / a/b/c/d, 'up -1' vous mènera à / a, etc.

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
}

Disponible pour téléchargement/installation sur github .

1
rouble

Hm, je ne pense pas.

Mais vous pouvez écrire cd ../../../.. (et ainsi de suite) au lieu de 7 fois cd ..

1
E. Lüders

pour les utilisateurs de poisson,

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

et enregistrez-le sur votre: ~/.config/fish/functions/cdd.fish

et juste $ cdd 3Pour monter 3 répertoires.

1
chriz

Vous pouvez essayer cette solution. C'est bon pour moi:

#!/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

J'ai créé un alias dans le fichier ~/.barsh. Et cela fonctionne bien pour moi. 
Exemple, pour trois dossiers. 
$ cd `cde 3`

0
Blow-Out