web-dev-qa-db-fra.com

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

Je passe actuellement beaucoup de temps de travail entre deux chemins très éloignés dans l’arbre et qui se détournent l’un de l’autre à la racine. Il me semble que ma vie serait beaucoup plus facile s'il y avait un argument pour cd qui conduit l'utilisateur au dernier répertoire dans lequel il se trouvait.

C'est, si je suis dans:

/etc/foo/bar/baz/moo

puis tapez:

cd /var/lib/fubarred_app/blargh/logs

J'aimerais pouvoir revenir au premier répertoire sans avoir à taper à nouveau le chemin complet.

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

Existe-t-il une commande courte qui me laisse simplement aller au répertoire précédent?

210
Yitzchak

La commande

cd -

effectuera l’échange dont vous avez besoin sur la plupart des coques classiques, la variante la plus ancienne est

cd "$OLDPWD"

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


La page de manuel POSIX pour cd mentionne:

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 doit également être remplacée par la valeur de l'ancien répertoire de travail (c'est-à-dire le répertoire de travail en cours immédiatement avant l'appel à cd).

OPÉRANDES

- Lorsqu'un trait d'union est utilisé comme opérande, il doit être équivalent à la commande suivante:

cd "$OLDPWD" && pwd 

qui change dans le répertoire de travail précédent, puis écrit son nom.

294
bryan

En plus de la réponse de bryan, il convient de mentionner qu'il existe également pushdet popdname__, qui constituent des répertoires similaires à une pile. Ceci est également disponible sur Windows NT; Cependant, il n'est pas disponible dans tous les coques.

Par exemple, nous pouvons accéder à trois répertoires différents et vous verrez toujours votre pile lorsque vous appelez pushdname__:

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

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

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

Et lorsque vous appelez popdtrois 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 va automatiquement pousser cdname __'s sur la pile.

105
slhck

Il y a des programmes "jump"

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

Cela facilite tout type de navigation dans les répertoires. Vous l'utilisez en donnant une partie du chemin et cela fonctionne.

Dans ton cas

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

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

Vous pouvez assigner n'importe quelle lettre à ces programmes, "j" est la 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
13
hayalci

En plus de cd - et cd $OLDPWD

Vous pouvez utiliser la recherche dans l'historique en appuyant sur CTRL-R et en saisissant quelques lettres de la commande cd que vous avez précédemment saisie. Appuyez plusieurs fois sur CTRL-R pour amener les correspondances les plus anciennes.

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

10
musa

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

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

a 1

et ensuite:

1
9
Mr Example

bashmarks vous permettra de mettre en signet une série de dossiers et de passer d’un dossier à l’autre en complétant la tabulation:

Pour marquer un dossier, allez simplement dans ce dossier, puis marquez-le comme ceci:

bookmark foo

Le marque-page s'appellera "foo". Lorsque vous souhaitez revenir à ce dossier, utilisez:

go foo

Pour voir une liste des signets:

bookmarksshow

L’achèvement des onglets fonctionne, pour aller au signet shoobie, simplement:

go sho[tab]
6
Handyman5

Une autre possibilité consisterait à ne laisser que deux fenêtres ouvertes, une à chaque répertoire.

4
Alger

Je sais que ce n'est pas à proprement parler une réponse à votre question, mais c'est utile pour atteindre l'objectif de vous emmenant dans vos répertoires importants .

dans toute descente UNIX-bash, vous pouvez utiliserCDPATHpour étendre le dossier dans lequel la commande cd effectue la recherche.

de mon fichier .bashrc:

export CDPATH='.:~/source/'

cd commence par rechercher dans votre dossier actuel, puis dans mon répertoire projet-codage.

cd myproject

.. me dirige vers ~/sources/myproject d'où que je sois actuellement.

Simple petite fonctionnalité qui a beaucoup aidé ma navigation dans les répertoires.

4
phareim

Si vous n'avez que 2 répertoires, le moyen le plus simple est, comme mentionné,

cd -

Quand j'ai eu de telles choses dans le passé, j'ai eu quelques astuces que j'ai faites, cela pourrait être utile.

  1. Mettez des commandes alias dans le fichier .cshrc, quelque chose comme ceci

    alias moo /etc/foo/bar/baz/moo  
    alias logs cd /var/lib/fubarred_app/blargh/logs
    
  2. Lien des raccourcis vers les chemins d’intérêt de mon répertoire personnel. Ceci est une chose une fois.

    cd ~
    ln -s /var/lib/fubarred_app/blargh/logs blargh
    ln -s /etc/foo/bar/baz/moo
    

Cela permettrait de changer un répertoire aussi facilement que:

   cd ~/moo
   cd ~/blargh
3
PearsonArtPhoto

Oui, cd - est la voie à suivre mais je m'inquiète du manque de puissance de votre Shell. popd et pushd sont également bons, et cette chose j a également l’air bien.

Je vais lancer mon propre utilitaire sur le ring ... c'est juste quelque chose que je construis, personnalise et migre avec moi depuis une dizaine d'années et qui fonctionne parfaitement pour ce que je veux.

Article de blog pour mon utilitaire de gestion d'annuaire

Si cela fonctionne pour vous, génial, mais s'il ne le fait pas, alors vous aurez autre chose :) Vous ne pouvez tout simplement pas vivre avec cd seul.

3
Derek Wyatt

Autojump est une commande "cd" de bash/sh/zsh qui, de vos actions, voit ce video .

donc cela vous déplacer à meuh après avoir appris les derniers dossiers

j moo
2
oluies

faisceau

J'ai mon propre outil, mais jetterai un coup d'œil à l'outil Dereks et à j également.

Bien sûr, le premier choix pour sauter en arrière est

cd -

Mon outil est destiné aux répertoires avec des noms uniques sur les systèmes, où locate est disponible; il recherche un nom de répertoire correspondant et saute dans la première correspondance:

beam () 
{ 
    ldir=$(locate $1 | egrep "$1$" | head -n 1);
    if [[ -d $ldir ]]; then
        echo $ldir;
        cd $ldir;
    else
        echo "no directory "$ldir;
    fi
}

Les dépendances:

  • localiser
  • grep
  • tête

Désavantages:

  • des répertoires plus récents que la dernière mise à jour -b ne sont pas trouvés
  • si plusieurs répertoires correspondent, cela dépend de votre chance, de savoir si vous êtes transféré à celui que vous avez en tête.

Améliorations/modifications:

  • au lieu de choisir le premier répertoire, le code peut être modifié pour afficher une liste de choix, en invitant l'utilisateur à saisir 1,2,3, ... pour aller à/bin,/usr/bin,/usr/local/bin ...

Usage:

  • mettez la fonction dans /etc/bash.bashrc ou ~/.bashprofile, pour pouvoir l’utiliser de manière pratique.

Avantage de ma solution:

  • non limité à 2 répertoires, comme cd -
  • il n'est pas nécessaire de consulter les répertoires une fois avant d'utiliser le faisceau.
2
user unknown