Nous savons que l'utilisation cd <directory>
ouvrira le répertoire, s'il existe!
En outre, cd ..
cela nous amènera à un niveau du répertoire de travail actuel.
Mais, lorsque nous avons un /home/thina/teams/td/tech/app/release/apks
répertoire imbriqué avec un chemin plus long , il est fatiguant de simplement aller dans le dossier apks
et il est également difficile de revenir à un autre nœud, par exemple ici /home/thina/teams
.
Existe-t-il un moyen de sauter la saisie de cd
et cd ..
? J'utilise Ubuntu 16.04.
command-line
bash
directory
gsthina
la source
la source
cd
etcd ..
?cd ../../../../..
CDPATH
variable dans lesbash
documents.Réponses:
Il y a
pushd
etpopd
:Essayez
help pushd
ethelp popd
pour plus d'options. Il n'y a pas laman
page, parce quepushd
etpopd
sont intégrés dans les commandes bash.la source
cd -
la même chose?pushd
etpopd
peut se souvenir de plus d'un chemin précédent.dirs
de lister votre pile de répertoires dans les commandespushd
/popd
.help pushd
ethelp popd
vous l'avez mentionné (ainsi quehelp dirs
) mais je pensais que je mentionnerais cela au cas où les gens se demanderaient d'où viennent ces commandes.help pusdh
En plus des très bonnes réponses déjà fournies, voici quelques conseils pour une utilisation
cd
efficace.cd -
vous ramènera au dernier répertoire dans lequel vous vous trouviez.cd ../../..
vous fera monter de 3 niveaux à la fois, vous pouvez utiliser la..
notation enchaînée pour «remonter» autant de répertoires que vous le souhaitez.cd ..
, puis utilisez l'historique bash en appuyant sur la touche fléchée pour réutiliser la commande.~
pour remplacer le répertoire personnel des utilisateurs actuels, si vous êtes connecté en tant qu'utilisateur thina,cd ~/teams
vous amènera à/home/thina/teams
cd
commande, si vous tapez une partie d'un segment de chemin suivi par Tab, ce segment sera terminé s'il n'y a pas d'autre choix valide. Par exemple, si vous aviez tapécd /home/thina/teams/td/t
puis appuyé Tab, le mot tech serait rempli pour vous, tant qu'il n'y aurait pas d'autres fichiers ou répertoires dans le répertoire td commençant par la lettre t.Utiliser ces conseils ensemble peut rendre la traversée des répertoires
cd
beaucoup moins pénible.la source
~
, en particulier si vous êtes root, vous~user
amènera rapidement auuser
répertoire personnel de.Pour remonter dans l'arborescence plusieurs niveaux à la fois, vous pouvez utiliser la fonction suivante (merci à muru pour la version améliorée):
Ensuite, vous pouvez faire:
Aditionellement:
up
sans argument est équivalent à encd ..
raison de${1:-1}
quels substituts$1
lorsqu'ils sont définis et1
sinoncd ..
vise à conserver lecd -
comportement habituel .la source
-gt
au lieu de>
.>
est lexicographique, il se compare à des chaînes. Aussi, au lieu de construire un chemin, pourquoi ne pas fairecd ..
en bouclefor i in $(seq "${1:-1}"); cd ..; done
:? Cela peut également éliminer laif
condition.gt
remarque, mais concernant votre deuxième suggestion, voir la dernière puce dans la réponse. Ça a du sens pour moi.OLDPWD
le chemin d'origine. Voici une version complète: paste.ubuntu.com/17990874Pour les noms de répertoire longs, utilisez des variables avec un chemin complet. Par exemple,
Ensuite, vous pouvez faire juste
cd "$APKS"
Quant à monter x nombre de répertoires, j'ai cette fonction définie dans mon
.bashrc
Pour revenir à
/home/thina/teams
deapks
vous faireVoici un exemple d'utilisation:
Une autre petite fonction que j'ai imaginée, mais jamais autant utilisée est la
bookmark
fonction.Voici comment cela fonctionne: il enregistre votre dossier actuel dans un fichier, puis vous pouvez cd dans un répertoire spécifique en fonction du numéro de ligne dans ce fichier. Exemple:
Et voici la fonction elle-même:
la source
Mise à jour: Il y a un encore plus puissant outil que
autojump
:fasd
, mais je ne suis pas familier avec elle.Je suis surpris que personne n'ait
autojump
encore mentionné quiC'est essentiellement ce que @graipher a construit, avec quelques options supplémentaires.
Comme je l'ai mentionné sur une autre question:
Après avoir cd quelques fois dans un répertoire (même une seule fois suffit):
cd /home/thina/teams/td/tech/app/release/apks
vous pouvez utiliser le raccourci
j
pour vous y rendre rapidement, quel que soit le répertoire dans lequel vous vous trouvez actuellement:j apks
Notez que l'utilisation de n'importe quelle partie du chemin fonctionne, tant qu'il est le plus élevé de la liste: vous
j app
amènera également à.../apks
si vous y êtes allé plus de fois.../app
.Je le recommanderais au lieu d'avoir votre propre script car il est bien entretenu, distribué pour Ubuntu et possède d'autres fonctionnalités intéressantes, telles que le saut à l'enfant :
Vous a déménagé à
apks
danstd
, plutôt que d' une autreapks
sous un arbre différent.la source
Alias
J'ai une liste des répertoires fréquemment utilisés directement disponibles via alias. Cela inclut également des raccourcis pour les répertoires de la hiérarchie.
Maintenant, quand je veux monter de trois niveaux, je tape
....<Enter>
et je suis là!la source
Activez l'
autocd
option (shopt -s autocd
) pour ne pas avoir à tapercd
. Par exemple, vous avez juste besoin de la commande à deux caractères..
à pour accéder au répertoire parent.Si vous naviguez entre deux répertoires, vous pouvez basculer entre eux avec
cd -
, ce qui revient au répertoire de travail précédent. L'autocd
option ne fait pas-
fonctionnercd -
mais vous pouvez définir un alias ou une fonction pour cela.Vous pouvez mémoriser des répertoires sur une pile avec les commandes internes
pushd
etpopd
. Le builtindirs
répertorie la pile de répertoires (je trouvedirs -v
plus lisible).Si vous passez fréquemment aux sous-répertoires d'un répertoire particulier et que ces sous-répertoires ont un nom plutôt unique, ajoutez-les à la
CDPATH
variable. Mais sachez que je n'ai jamais trouvé de situation oùCDPATH
vraiment pratique.Vous pouvez définir une variable sur un nom de répertoire, puis la modifier avec
$foo
.Zsh a quelques fonctionnalités intéressantes que bash n'a pas. Certains d'entre eux peuvent être émulés en écrivant des fonctions qui font le même travail. En particulier, la forme à deux arguments de
cd
vous permet de passer facilement à un autre répertoire avec un nom similaire, par exemple à partir de/home/thina/teams/td/tech/app/release/apks/com.acme/v1
, l'exécution decd release beta
va à/home/thina/teams/td/tech/app/beta/apks/com.acme/v1
.la source
Comme j'ai déjà répondu à une question connexe sur UnixSE, j'utilise un script appelé z [github] pour cela.
Il se souvient des répertoires dans lesquels vous cd, les classe en fonction de la fréquence (fréquence + récence) et vous permet de passer à l'un des chemins mémorisés en utilisant une partie de son nom.
Après avoir cd'ed dans un répertoire au moins une fois, vous pouvez faire par exemple au lieu de:
Faites juste:
qui fonctionnera, en utilisant une correspondance de nom partielle (en supposant que vous n'avez pas d'autre répertoire contenant dans son chemin le terme sub et qui a une fréquence plus élevée).
J'ai également défini une fonction comme celle-ci, qui essaie d'abord un cd normal et si cela échoue, utilise z:
Cela vous donne le meilleur des deux. Si le dossier se trouve dans le répertoire en cours ou si un chemin d'accès complet valide est donné, il y aura simplement un cd, mais sinon, il essaiera de trouver une correspondance dans la base de données et de y cd. Cela élimine la (petite) douleur d'avoir parfois à utiliser cd (pour former la base de données, aller dans un dossier auquel vous n'êtes jamais allé auparavant) et parfois de vous souvenir d'utiliser z, le cas échéant.
la source
cd
n'interfère pas avec la façon dontz
se constitue la base de données des répertoires fréquemment visités?autojump
?Trois autres options que je trouve bien fonctionner (bien que je puisse à l'avenir en utiliser
pushd
davantage, je viens juste de l'apprendre):Organisez vos chemins afin que vous n'ayez pas besoin d'accéder à
cd
des répertoires profondément imbriqués en premier lieu, ou plutôt: de sorte que les emplacements que vous devez souvent visiter soient à portée de main. Pour ce faire, utilisez les liens symboliques : conservez les répertoires explicites et bien hiérarchisés tels qu'ils sont, mais créez un lien d'accès rapide à votre convenance.Ensuite, au lieu de taper le long chemin vers
cd
, utilisez simplementcd ~/apks
, etcd ../teams
(ou, dans cet exemple préférable~/teams
), pour revenir.N'utilisez pas un seul shell et un CD dans les deux sens entre les chemins, mais gardez un shell en cours d'exécution pour chacun des chemins dans lesquels vous devez travailler. Il existe plusieurs niveaux pour réaliser ce multitâche:
tmux
.Il suffit de lancer une action dans une commande à usage unique qui se trouve
cd
dans le dossier, y fait une chose et redonne immédiatement le contrôle sur le dossier d'origine: au lieu defaites simplement le one-liner
ou équivalent
Pas
cd
du tout , mais exécutez simplement la commande directement depuis votre répertoire personnel. Les extensions de corset peuvent aider beaucoup ici: au lieu detu peux faire
la source
pushd
est très très utile. Vous voudrez peut-être ajouter plus d'informations sur la façon de l'utiliser pour améliorer votre réponse.Pushd et Popd
Les commandes
pushd
etpopd
sont mes favoris. Lapushd
commande se souviendra des répertoires que vous avez visités, visibles avec la commandedirs
, et lorsque vous êtes prêt à sauter en arrière, utilisezpopd
pour revenir.Voici un exemple d'utilisation des fonctions et alias bash:
J'utilise constamment un mélange de ces commandes de différentes manières.
Alias
Une autre option pour les répertoires fréquemment consultés consiste simplement à aliaser les commandes
cd
oupushd
. Donc, en utilisant les exemples de votre message:Combinaison
Combinez les deux idées et vous pouvez même avoir ceci:
Ce qui vous donne alors beaucoup de flexibilité pour parcourir les répertoires. Je garde les
cd***
etsd***
alias à portée de main pour des choses commeDesktop
,Documents
,Music
,Downloads
, etc. et il est très pratique!la source
Essayez z.lua - Une nouvelle commande cd qui vous aide à naviguer plus rapidement en apprenant vos habitudes.
cd dans un répertoire contient foo:
cd dans un répertoire se termine par foo:
utiliser plusieurs arguments:
En supposant la base de données suivante:
"z in"
entrerait/home/user/mail/inbox
comme entrée pondérée la plus élevée. Cependant, vous pouvez passer plusieurs arguments à z.lua pour préférer une entrée différente. Dans l'exemple ci-dessus,"z w in"
changerait alors de répertoire en/home/user/work/inbox
.cd avec sélection interactive:
Lorsque plusieurs correspondances sont trouvées, l'utilisation
z -i
affichera une liste:Ensuite, vous pouvez entrer le numéro et choisir où aller avant le CD réel. par exemple. entrée 3 vers cd vers
/home/data/software
. Et si vous appuyez simplement sur ENTRÉE et n'entrez rien, il quittera et restera où vous étiez.z.lua
prend également en charge lafzf
sélection interactive ou la complétion d'arguments:achèvement avec fzf
retour rapide au parent sans taper
cd ../../..
:Une nouvelle option
"-b"
peut rapidement revenir à un répertoire parent spécifique dans bash au lieu de taper "cd ../../ .." de manière redondante:(Aucun argument) :
cd
dans la racine du projet, la racine du projet le répertoire parent le plus proche avec.git
/.hg
/.svn
dedans.(Un argument) :
cd
dans le parent le plus proche commençant par mot-clé, sinon trouver, aller au parent contenant le mot-clé.(Deux arguments) : remplacez la première valeur par la seconde (dans le chemin actuel).
...
Commençons par alias
z -b
pourzb
:Je souhaite que cela puisse répondre à vos besoins.
la source
le poisson a plusieurs belles installations pour se déplacer rapidement.
De plus, je garde mes répertoires préférés liés à ~ / f, donc je peux cd ~ / f / x pour accéder à ~ / foo / bar / baz / experimental-data.
la source
J'ai longtemps utilisé des alias pour les répertoires fréquemment consultés.
J'ai également une fonction bash appelée ccb (abréviation de create cd bat file - cela provient de dos / windows où le script shell .bat ccb.bat créerait un autre fichier .bat pour sauter dans le répertoire en cours) qui crée / ajoute des alias (dans le fichier .bash_aliases) dans le répertoire courant.
par exemple: $ ccb myfav créera un alias dans le répertoire courant avec un alias myfav dans le fichier .bash_aliases et source le fichier .bashrc afin que l'alias soit immédiatement disponible.
Je viens de trouver une nouvelle solution. C'est une fonction bash
cela n'a pas besoin d'apprendre quoi que ce soit de l'utilisation précédente. Le problème que cela pourrait ne pas résoudre est le suivant: s'il y a plus de 1 répertoires nommés "deep_nested_dir_name" dans l'arborescence des sous-répertoires, alors il sautera au premier répertoire trouvé par find.
De plus, cette solution ne pourra pas accéder à une autre arborescence de répertoires.
entre les alias codés en dur et les alias générés et cette nouvelle fonction lj (), la plupart de mes besoins sont pris en charge.
Voici ma fonction bash ccb () pour tous ceux qui veulent l'utiliser
la source