Question Comment puis-je changer de répertoire au lieu de monter?


Je passe actuellement beaucoup de temps de travail à faire des allers-retours entre deux chemins très éloignés de l’arbre et à s’en détourner à la racine. Il me semble que ma vie serait beaucoup plus facile s'il y avait un argument pour cd cela amène l'utilisateur au dernier répertoire dans lequel il se trouvait.

C'est-à-dire si je suis dans:

/etc/foo/bar/baz/moo

puis tapez:

cd /var/lib/fubarred_app/blargh/logs

Je voudrais pouvoir revenir au premier répertoire sans avoir à taper tout le chemin.

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

Y a-t-il une commande courte qui me laisserait aller au répertoire précédent?


209
2017-08-17 20:18


origine


en plus de @Bryanexcellente réponse, vous pouvez envisager de créer une paire d'alias pour chaque chemin afin de pouvoir taper quelque chose comme:bazmoo" ou "blarghlog"à l'invite :) - warren
Pourquoi ne pas vous simplement utiliser Écran GNU? - Shi
Quelle coquille? Cela fait une énorme différence. - Randal Schwartz
@ Warren Ditto. c'est ma façon préférée de tout faire. la moitié de ce que j'utilise mon ordinateur a son propre alias maintenant ... =) - ixtmixilix
Fasd est génial. Vérifiez-le. - majkinetor


Réponses:


La commande

cd -

effectuera le swap dont vous avez besoin sur la plupart des shells grand public, la variante la plus ancienne étant

cd "$OLDPWD"

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


le Page de manuel POSIX pour cd mentionne:

LA DESCRIPTION

Si, pendant 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 le répertoire de travail actuel précédant l'appel à cd).

Opérandes

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

cd "$OLDPWD" && pwd 

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


292
2017-08-17 20:23



Gardez à l'esprit que cela dépend vraiment du shell que vous utilisez, et comme vous n'avez pas spécifié, il serait difficile de donner la réponse "portable" inexistante. - Randal Schwartz
@Randall, Peut-être pourriez-vous combiner tous vos commentaires de shell individuels en une seule réponse Voltron-Shell. - hyperslug
@Randall. J'utilisais bash. Cela fonctionne aussi dans ksh et zsh. Au fait, j'ai d'abord appris à programmer à partir de l'édition 1994 de Apprentissage Perl alors excusez-moi alors que je suis un peu fan. :) - Yitzchak
Hmm, j'ai utilisé cd $OLDPWD pour ça. C'est bien que les shells traditionnels offrent une forme beaucoup plus courte. - ulidtko
@sinni Certaines saveurs faire avoir pushd, et au moins c'est un intégré dans bash. - slhck


En plus de la réponse de Bryan, il convient de mentionner qu'il y a aussi pushd et popd, qui construisent des répertoires comme une pile. Ceci est également disponible sur Windows NT; Cependant, il n'est pas disponible dans toutes les coques.

Par exemple, nous pouvons accéder à 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 à ces répertoires dans 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 cdest sur la pile.


105
2017-08-17 20:35



pushd et popd ne sont pas disponibles dans tous les shells. - Randal Schwartz
@ Wiesław: Vraiment? Je souhaite que bash ait ça ... Bien sûr, je pourrais alias cdà pushd, et ce serait surtout la même chose. - Chris Charabaruk
Ou alias pd pour pousser et avoir les deux. BTW pushd (ou pd, si vous l'aliasez) échange lui-même le répertoire en cours et le dernier répertoire poussé, réalisant essentiellement ce que fait "cd -". - JRobert
J'aime le concept mais je ne m'y suis jamais habitué. - Thorbjørn Ravn Andersen


Il y a des programmes de "saut"

  • AutoJump (maintenu avec des fonctionnalités de base)
  • j2  (apparemment non entretenu avec quelques fonctionnalités avancées)
  • z (version maintenue de "j" avec des fonctionnalités avancées)

Celles-ci facilitent 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 attribuer 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
2017-08-17 23:52



"j" est clairement spécifique à la coque. Vous n'avez pas dit ça. - Randal Schwartz
@Randal: Comment est-il spécifique au shell? C'est un programme. - Fixee
Je suis un idiot. :) Je le vois maintenant. - Randal Schwartz


En plus de cd - et cd $OLDPWD

Vous pouvez utiliser la recherche d’historique en appuyant sur CTRL-R et en tapant quelques lettres du cd commande que vous avez entré avant. Pressage CTRL-R à plusieurs reprises apportera des matchs plus anciens.

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


10
2017-08-18 09:44



CTRL-R ne vous aidera pas nécessairement. Vous avez peut-être été dans / some / obscure / directory / deep et fait "cd evendeeperdir", puis vous êtes passé à ~ / somehere / different. - justintime
Génial! Cela fonctionne pour d'autres choses que cd, grande aide! - Niloct


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

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

a 1

et ensuite:

1

9
2017-08-18 01:50



Seulement sur un shell qui comprend les alias et les fonctions. Pas tout à faire. - Randal Schwartz
donc cela saute en tapant le alias = les pièces? hmmmm - Xen2050


repères vous permettra de mettre en signet une série de dossiers et de passer d'un dossier à l'autre avec l'achèvement de l'onglet:

Pour marquer un dossier, accédez simplement à ce dossier, puis marquez-le comme suit:

bookmark foo

Le signet sera nommé "foo". Lorsque vous souhaitez revenir à ce dossier, utilisez:

go foo

Pour voir une liste des signets:

bookmarksshow

L'achèvement de l'onglet fonctionne, pour aller au signet shoobie, simplement:

go sho[tab]

6
2017-08-18 08:54





Une autre possibilité serait de garder deux fenêtres ouvertes, l’une étant placée dans chaque répertoire.


4
2017-08-18 03:00



Pas d'historique partagé si vous utilisez / éditez les commandes précédentes régulièrement (peut-être qu'une réinitialisation les obtiendrait ...?) - Xen2050
@ Xen2050 Voir l'option shell share_history dans zsh. - Radon Rosborough


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

dans n'importe quelle descente UNIX-bash vous pouvez utiliser CDPATH pour étendre le dossier dans lequel cd-command recherche

à partir de mon fichier .bashrc:

export CDPATH='.:~/source/'

CD recherche d'abord dans votre dossier actuel, puis recherche dans mon répertoire de projet de codage.

cd myproject

.. m'emmène à ~ / sources / myproject d'où je suis actuellement debout.

Simple petite fonctionnalité qui a beaucoup aidé mon répertoire de navigation.


4
2017-08-19 11:11



+1 Cela ajoute le dossier CDPATH à cdla liste de saisie semi-automatique (TAB), ce qui est bon. Mais si la . n'est pas inclu et s'il y a un dossier dans un dossier CDPATH avec le même nom comme un dans votre répertoire actuel, alors cd samename ira au répertoire CDPATH et ne pas celui dans le répertoire actuel, qui est mauvais. Avoir à utiliser cd ./samename pour entrer dans un dossier dup - Xen2050
Oui, bon commentaire. Toujours inclure le premier ., ou vous aurez des trucs bizarres. - phareim


Ouaip, cd - est la voie à suivre mais je m'inquiète du manque de puissance que vous avez dans votre coquille. popd et pushd sont aussi bons, et que j La chose a aussi l'air bien.

Je jetterai mon propre utilitaire dans le ring ... c'est quelque chose que je construis, personnalise et migre avec moi depuis environ 10 ans et ça fonctionne très bien pour ce que je veux.

Article de blog pour mon utilitaire de gestion d'annuaire

Si cela fonctionne pour vous, alors génial, mais si cela ne vous promet pas alors vous obtiendrez autre chose :) Vous ne pouvez tout simplement pas vivre avec cd seul.


3
2017-08-18 14:18