224 votes

Comment puis-je passer au répertoire précédent au lieu de monter ?

Je passe actuellement une grande partie de mon temps de travail à faire des allers-retours entre deux voies qui sont très loin dans l'arbre et se détournent l'une de l'autre à la racine. Il me semble que ma vie serait beaucoup plus facile s'il y avait un argument pour cd qui ramène l'utilisateur au dernier répertoire dans lequel il se trouvait.

Enfin, si j'en suis :

/etc/foo/bar/baz/moo

puis tapez :

cd /var/lib/fubarred_app/blargh/logs

J'aimerais pouvoir revenir au premier répertoire sans avoir à retaper tout le chemin.

La clé de mémoire ne suffit pas, car j'utilise suffisamment de commandes à chaque endroit pour qu'il soit aussi difficile de revenir en arrière et de trouver le chemin que je veux que de le taper moi-même.

Existe-t-il une commande courte qui me permettrait d'aller dans le répertoire précédent ?

9 votes

En plus de @ bryan Dans l'excellente réponse de l'auteur, vous pourriez envisager de créer une paire d'alias pour chaque chemin afin de pouvoir simplement taper quelque chose comme : " bazmoo " ou " blarghlog "à l'invite :)

4 votes

Pourquoi n'utilises-tu pas simplement Écran GNU ?

2 votes

Quel Shell ? Cela fait une énorme différence.

320voto

DNS GUI Debian Points 31

La commande

cd -

effectuera l'échange dont vous avez besoin sur la plupart des obus courants, la variante plus ancienne et plus longue est

cd "$OLDPWD"

qui utilisera la variable d'environnement qui contient le précédent répertoire de travail.


El Page de manuel POSIX pour cd mentions :

DESCRIPTION

Si, au cours de l'exécution des étapes ci-dessus, la variable d'environnement PWD est modifiée, la variable d'environnement OLDPWD est également modifiée à la valeur de l'ancien répertoire de travail (c'est-à-dire le répertoire de travail courant précédant immédiatement l'appel à cd).

OPERANDS

   -   Lorsqu'un trait d'union est utilisé comme opérande, cela équivaut à la commande :

cd "$OLDPWD" && pwd 

qui passe au répertoire de travail précédent et écrit ensuite son nom.

7 votes

Gardez à l'esprit que cela dépend vraiment du Shell que vous utilisez, et puisque vous n'avez pas spécifié, il serait difficile de donner la réponse "portable" inexistante.

16 votes

@Randall, vous pourriez peut-être combiner tous vos commentaires individuels Shell en une réponse Voltron-Shell.

0 votes

@Randall. J'utilisais bash. Cela fonctionne aussi dans ksh et zsh. Au fait, j'ai appris à programmer à partir de l'édition 1994 de Apprendre Perl alors excusez-moi si je fais un peu de fanboy :)

106voto

slhck Points 209720

En plus de la réponse de Bryan, il est intéressant de mentionner qu'il y a aussi pushd y popd qui construisent des répertoires comme une pile. Cette fonction est également disponible sous Windows NT ; toutefois, elle n'est pas disponible dans tous les shells.

Par exemple, nous pouvons aller dans trois répertoires différents, et vous verrez toujours votre pile lorsque vous appelez pushd :

charon:~ werner$ pushd Documents/
~/Documents ~

charon:Documents werner$ pushd ../Movies/
~/Movies ~/Documents ~

charon:Movies werner$ pushd ../Downloads/
~/Downloads ~/Movies ~/Documents ~

Et quand vous appelez popd trois fois de suite, vous accédez aux répertoires de la pile dans l'ordre inverse. Dans le même temps, la pile sera à nouveau vidée.

charon:Downloads werner$ popd
~/Movies ~/Documents ~

charon:Movies werner$ popd
~/Documents ~

charon:Documents werner$ popd
~

charon:~ werner$ popd
-bash: popd: directory stack empty

Si vous utilisez Zsh, il a une option AUTO_PUSHD, qui poussera automatiquement cd sur la pile.

0 votes

Pushd et popd ne sont pas disponibles dans tous les shells.

5 votes

@Wiesaw : Vraiment ? J'aimerais que Bash ait ça... Bien sûr, je pourrais aliaser cd a pushd et ce serait presque la même chose.

3 votes

Ou alias pd pour pushd et avoir les deux. En fait, pushd (ou pd, si vous l'aliasé) échange le répertoire courant et le dernier répertoire poussé, accomplissant essentiellement ce que 'cd -' fait.

13voto

Martin Points 15155

Il existe des programmes de "saut".

  • autojump (maintenu avec les caractéristiques de base)
  • j2 (apparemment non maintenue avec quelques fonctionnalités avancées)
  • z (version maintenue de "j" avec des fonctionnalités avancées)

Ils facilitent la navigation dans les répertoires. Vous l'utilisez en donnant une partie du chemin d'accès et cela fonctionne tout simplement.

Dans votre cas

~$ j baz 
/etc/foo/bar/baz/moo$

~$ j bla 
/var/lib/fubarred_app/blargh/logs$

Vous pouvez attribuer la lettre que vous voulez à ces programmes, "j" est une tradition :)

j2 et z prennent en charge plusieurs termes de recherche,...

~$ j baz src
/home/me/projects/baz/repository/trunk/src$

... et plus d'options.

~$ j -l  # list directories by "frecency"(frequency + recency) score
~$ j -r PATTERN # match by rank only, not recency
~$ j -t PATTERN # match by recency only, not rank

2 votes

"j" est clairement Shell spécifique. Tu n'as pas dit ça.

3 votes

@Randal : Comment est-ce Shell spécifique ? C'est un programme.

3 votes

Je suis un idiot. :) Je le vois maintenant.

10voto

J0hnG4lt Points 123

Vous pouvez l'utiliser pour créer facilement des alias pour les répertoires :

a() { alias $1=cd\ $PWD; }

a 1

et plus tard :

1

1 votes

Seulement sur un Shell qui comprend les alias et les fonctions. Ce n'est pas le cas de tous.

0 votes

Afin de ne pas avoir à taper le alias = des pièces ? hmmmm

10voto

musa Points 561

En plus de cd - y cd $OLDPWD

Vous pouvez utiliser la recherche par historique en appuyant sur CTRL-R et en tapant quelques lettres du cd la commande que vous avez saisie auparavant. En appuyant sur CTRL-R à plusieurs reprises, apporteront des allumettes plus anciennes.

Cette méthode sera plus utile si vous avez plus de deux chemins à modifier.

1 votes

CTRL-R ne sera pas forcément utile. Vous auriez pu être dans /some/obscure/directory/deep et faire "cd evendeeperdir" puis aller dans ~/somehere/different.

1 votes

Super ! Cela fonctionne pour d'autres choses que cd Une aide précieuse !

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