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?
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.
En plus de la réponse de bryan, il convient de mentionner qu'il existe également pushd
et popd
name__, 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 pushd
name__:
charon:~ werner$ pushd Documents/
~/Documents ~
charon:Documents werner$ pushd ../Movies/
~/Movies ~/Documents ~
charon:Movies werner$ pushd ../Downloads/
~/Downloads ~/Movies ~/Documents ~
Et lorsque 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 va automatiquement pousser cd
name __'s sur la pile.
Il y a des programmes "jump"
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
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.
Vous pouvez l'utiliser pour créer facilement des alias pour des répertoires:
a() { alias $1=cd\ $PWD; }
a 1
et ensuite:
1
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]
Une autre possibilité consisterait à ne laisser que deux fenêtres ouvertes, une à chaque répertoire.
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.
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.
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
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
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.
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:
Désavantages:
Améliorations/modifications:
Usage:
Avantage de ma solution:
cd -