33 votes

Shell - Naviguer vers le haut de 'n' répertoires

Je me retrouve souvent à faire des commandes comme celle-ci

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

Y a-t-il un raccourci que je peux utiliser pour faire un cd ../ n fois ?

39voto

Stewart Points 1385

Non, il n'y a pas de commande existante pour cela, mais il est trivial d'en écrire une. Ajoutez ces lignes à votre ~/.bashrc (remerciements à D. Ben Knoble pour en indiquant que la variable doit être local ):

function ncd(){
  local path=""
  for ((i=1;i<=$1;i++)); do
    path="../$path"
  done
  echo "Moving to $path" >&2
  cd "$path"
}

Sauvegardez le fichier, ouvrez un nouveau terminal, et vous pouvez maintenant déplacer N répertoires vers le haut en utilisant ncd N . Par exemple :

$ pwd
/home/terdon/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9
$ ncd 5
Moving to ../../../../../
$ pwd
/home/terdon/dir1/dir2/dir3/dir4
$ ncd 2
Moving to ../../
$ pwd
/home/terdon/dir1/dir2

16voto

Fourteen Points 171

Dans le monde Windows, Alt + flèche vers le haut permet de naviguer vers le répertoire parent dans l'explorateur Windows. J'ai donc créé quelque chose comme ceci dans ~/.inputrc :

"\33\33[A": "cd ..\n"

puis en appuyant sur Alt + Flèche vers le haut, on passe au répertoire parent dans le terminal. Vous Vous devez bien sûr appuyer plusieurs fois sur la touche pour aller plus haut, mais j'ai trouvé que c'était très rapide. très rapide. Vous pouvez également modifier le raccourci à votre convenance.

15voto

egmont Points 7095

Vous pouvez facilement créer des alias ou des fonctions Shell pour effectuer la tâche donnée. J'utilise personnellement celles-ci :

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

et ainsi de suite, définis manuellement jusqu'à de nombreux points dans mon système d'information. .bashrc .

Une fonction Shell pourrait au contraire facilement prendre un paramètre numérique, et exécuter cd .. dans une boucle autant de fois.

7voto

D. Ben Knoble Points 191

Similaire à la réponse de @terdon, avec une utilisation et un rendement légèrement plus naturels :

# go up
up() {
  local count="${1:-1}"
  local path=../
  while (( --count > 0 )) ; do
    path="$path"../
  done
  echo "cd -- $path"
  cd -- "$path"
}

Cela définit une fonction up qui a les propriétés suivantes :

  • up n augmentera n répertoires
  • up remontera exactement d'un répertoire (c'est-à-dire que la valeur par défaut de l'option n est 1)
  • imite celle de l'utilisation de shopt -s autocd (d'où le -- qui sont techniquement inutiles)
  • comme avant, OLDPWD est correctement réglé sur la valeur actuelle de PWD plutôt plutôt que l'un des répertoires intermédiaires. Cela signifie que up 5; cd - fonctionne comme prévu.

4voto

Eric Reed Points 151

Utilisation de le hack printf :

function updir(){
    cd $(printf '../%.0s' {1..$1})
}

E.G. updir 5 vous fera monter de 5 répertoires.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X