Raccourci pour basculer vers un répertoire donné

12

Dans le terminal Ubuntu, je passe beaucoup de temps à basculer vers un répertoire particulier à chaque démarrage de l'ordinateur. Existe-t-il un moyen de faciliter ce processus? Existe-t-il une touche de raccourci ou un changement de répertoire rapide que je peux utiliser (comme la numérotation rapide sur un téléphone)?

 eg:
    cd 1:Changes to saved directory one
Développeur Android
la source
Quatre ans depuis que cette question a été posée et personne n'a mentionné CDPATH jusqu'à aujourd'hui. :(
kojiro
Je suppose que cela peut dépendre de votre console, mais dans le terminal Kubuntu, il y a un menu Signets où je peux simplement marquer un répertoire et y accéder de cette façon!
Pixel

Réponses:

12

Il y a deux options:

  1. Si vous voulez être dans un répertoire spécifique à chaque fois que vous ouvrez un terminal bash, éditez votre ~/.bashrcfichier et ajoutez simplement la ligne cd Directory, par exemple cd ~/Desktop.

  2. Si vous voulez avoir plusieurs coupes de court, vous pouvez toujours utiliser des variables globales, que vous pouvez définir dans votre ~/.bashrcfichier comme suit export a=/tmpet vous serez alors en mesure de le faire cd $aqui vous amènera à /tmp.

Rappelez - vous que , après l' édition de votre .bashrcfichier que vous devez redémarrer le terminal ou d' ouvrir un nouveau.

Dan
la source
3
Pour éviter le redémarrage du terminal , vous pouvez utiliser source ~/.bashrcou, plus courte, . ~/.bashrc.
Gerhard Burger
18

Aussi jeter un oeil à autojump, il construit une base de données avec des répertoires visités précédemment et vous pouvez y sauter. Ainsi, par exemple, vous avez

/home/user/this/long/and/annoyingly/deep/directory/workstuff

alors si vous avez visité une fois que vous pouvez sauter par

j workstuff

ou même

j stuff

parce que cela fonctionne aussi avec des correspondances partielles. Si plus d'un répertoire correspond à vous sautez à celui qui est le plus visité, si ce n'est pas celui que vous vouliez, puis répétez la commande pour aller à la seconde.

Cependant, il va mieux! Si vous avez également le répertoire

/home/user/stuff

et vous faites

j stuff 

et TabTabTabvous obtenez (dans l'ordre le plus visité)

$ j stuff__
stuff__1__/home/user/this/long/and/annoyingly/deep/directory/workstuff
stuff__2__/home/user/stuff

et vous pouvez simplement appuyer sur le numéro du répertoire que vous voulez!

Pour installer, vous pouvez simplement utiliser sudo apt-get install autojump, puis vous devez ajouter

source /usr/share/autojump/autojump.bash

à votre ~/.bashrc.

Plus d'informations ici: https://github.com/wting/autojump (également des instructions sur la façon d'installer cela à partir de src qui vous obtient la version la plus récente)

Gerhard Burger
la source
1
crtl + r dans un terminal recherche également des "correspondances partielles" dans les commandes précédentes. Vraiment très pratique aussi.
Dan
6

Les alias Bash sont utiles pour créer des raccourcis vers des commandes couramment exécutées.

  • Dans ~/.bashrc, ajoutez une ligne similaire à la suivante pour créer l'alias:

    alias jump1='cd /long/path/name/that/is/frequently/used'
    
  • Fermez et ouvrez à nouveau le terminal, ou exécutez source ~/.bashrc.

  • À partir de maintenant, vous pouvez simplement exécuter jump1pour exécuter cette longue cdcommande.

Voir également:

Flimm
la source
4

Même s'il existe déjà de bonnes réponses, j'ai pensé mentionner pour être complet les anciens pushdet les popdBash buildins qui vous permettent de vous déplacer très rapidement entre les répertoires dans les chemins profonds de votre système de fichiers. Contrairement aux autojumpsignets mentionnés par burger.ga , la pile de répertoires créée à l'aide de pushdest uniquement temporaire.

Comme le note le manuel GNU , pushdet popdsont des commandes internes Bash utilisées pour construire une pile de répertoires temporaire qui est un

liste des répertoires récemment visités. La commande intégrée pushd ajoute des répertoires à la pile lorsqu'elle modifie le répertoire en cours, et la commande intégrée popd supprime les répertoires spécifiés de la pile et remplace le répertoire en cours par le répertoire supprimé. Le répertoire dirs affiche le contenu de la pile de répertoires.

Il faut un peu de temps pour s'y habituer, mais il y a beaucoup de tutoriels utiles sur ce blog et ce site par exemple. Il n'y a pas de pages de manuel distinctes pour les commandes, car elles sont incluses dans la page de manuel Bash, mais pour une référence rapide, vous pouvez afficher la page GNU Bash .

L'explication la plus claire se trouve dans cet article très utile et est exactement la façon dont j'utilise pushdet popd:

Tout d'abord, utilisez dirsou dirs -lpour répertorier les répertoires de la pile et dirs -ceffacer la pile.

Dans un sens, vous marquez l'endroit où vous souhaitez revenir en entrant

pushd /home/mike/Pictures/Canon/2012_07_01

puis vous pouvez ajouter plus de répertoires à la pile, de sorte que vous obtenez une liste de répertoires comme ci-dessous, qui comprend 3 dossiers désignés et votre ~dossier de départ:

dirs
~/Downloads/folder/interest ~/Music/artist/album ~ ~/Pictures/Canon/2012_07_01

En fait, vous n'avez pas besoin d'utiliser popdimmédiatement car cela supprime les répertoires de la pile; la meilleure chose à faire est d'utiliser pushdpour faire pivoter la pile, afin que vous puissiez continuer à basculer entre les répertoires et les ordonner comme vous le souhaitez. Pour plus d'informations sur cette rotation utile de la pile, consultez la page de manuel Bash .

Si vous avez exactement l'arrangement de la pile comme ci - dessus dirsmontre liste, pushd +3vous fait passer au dossier spécifique photos et lieux sur le dessus de la pile (il est +3 et non +4 que vous ne comptez pas votre ~dans la pile de répertoire):

pushd +3
~/Pictures/Canon/2012_07_01 ~/Downloads/folder/interest ~/Music/artist/album ~

Ainsi, l'invite lit,

~/Pictures/Canon/2012_07_01$

Vous pouvez continuer à le faire sans les retirer de la pile, bien que tous les dossiers que vous cdà, autres que ceux qui sont ajoutés à la pile de répertoire avec pushd, va modifier votre pile de répertoire.

Une fois que vous avez la pile de répertoire disposé dans l'ordre que vous voulez, vous pouvez utiliser popdpour faire défiler rapidement les répertoires, puis revenir au dossier de la maison; par exemple, de Picturesnous pouvons retourner à Downloads:

popd
~/Downloads/folder/interest ~/Music/artist/album ~

et les lectures rapide

~/Downloads/folder/interest$

En général , la beauté de ce que vous pouvez configurer la pile de répertoire et l'ordre des éléments en son sein avec pushdet puis, que vous avez trois fichiers à modifier dans chacun de ces répertoires, vous pouvez revenir instantanément à chacun avec popdtout en les supprimant à partir de la pile de répertoires. Puis , avec votre dernier popdvous retournerez ~. Il devient particulièrement utile lorsque vous avez des répertoires particulièrement profonds et peut l' utiliser pour mettre en place la pile de répertoire pour se déplacer rapidement entre eux.

De plus, cette question contient quelques conseils qui pourraient vous être utiles lorsque vous travaillez sur la ligne de commande:

Communauté
la source
2

Même si il existe une manière de ligne de commande pour le faire plus vite, je vous recommande une extension à l' aide personellement Nautilus appelé nautilus-open-terminal.

Installez d' abord le paquet nautilus-open-terminalet signets vos dossiers favoris avec Nautilus. Le Nautilus 3.6. *, Vous devez aller dans le menu de vitesse et sélectionnez Ajouter aux favoris Location .

entrez la description de l'image ici

Ensuite , utilisez les signets Nautilus pour aller plus vite dans vos répertoires favoris, et juste faire un clic droit sur un espace vide et sélectionnez Ouvrir dans le Terminal .

entrez la description de l'image ici

Maintenant, vous pouvez avoir les deux ligne de commande et gestionnaire de fichiers accès rapide à vos répertoires préférés.

remjg
la source
L'affiche originale essaie de fonctionner depuis le terminal et il est souvent plus rapide de travailler depuis le terminal.
haziz
1
@haziz: Oui, mais les questions et réponses AskUbuntu devraient être utiles non seulement au PO, mais spécialement pour toutes les personnes qui l'ont trouvé sur le Web. C'est une réponse précieuse pour moi.
Javier Rivera,
2

anc a été conçu exactement pour ce cas d'utilisation.

https://github.com/tobimensch/anc

Voici un extrait du fichier README.md:

# make the current directory the default anchor:
$ anc s

# go to /etc, then /, then /usr/local and then back to the default anchor:
$ cd /etc; cd ..; cd usr/local; anc

# go back to /usr/local :
$ anc b

# add another anchor:
$ anc a $HOME/test

# view the list of anchors (the default one has the asterisk):
$ anc l
(0) /path/to/first/anchor *
(1) /home/usr/test

# jump to the anchor we just added:
# by using its anchor number
$ anc 1
# or by jumping to the last anchor in the list
$ anc -1

# add multiple anchors:
$ anc a $HOME/projects/first $HOME/projects/second $HOME/documents/first

# use text matching to jump to $HOME/projects/first
$ anc pro fir

# use text matching to jump to $HOME/documents/first
$ anc doc fir

# add anchor and jump to it using an absolute path
$ anc /etc
# is the same as
$ anc a /etc; anc -1

# add anchor and jump to it using a relative path
$ anc ./X11 #note that "./" is required for relative paths
# is the same as
$ anc a X11; anc -1

# using wildcards you can add many anchors at once
$ anc a $HOME/projects/*

# use shell completion to see a list of matching anchors
# and select the one you want to jump to directly
$ anc pro[TAB]

Divulgation complète: je suis l'auteur de anc.

Tobi
la source
1

Vous pouvez placer un alias dans votre fichier .bashrc (ou le fichier de configuration de votre shell préféré - ils sont généralement dans votre répertoire personnel):

alias cd1="cd directory/directory/my_destination/"

Un lien d'information utile sur l'utilisation des alias dans bash est ici .

Haziz
la source
1

J'ai créé un ensemble de fonctions bash pour cela et l'ai ajouté à mon .bash_profile

Scénario

goto(){
    cd $(getFolders $1)
}

gf(){
    getFolders $1
}

getFolders (){

    local folderList=(
     'alias'
     'Description of alias'
     '/path/to/alias/folder'
     'alias2'
     'Description of alias2'
     '/path/to/alias2/folder'
    )
    local moved="0"
    local count=0

    # Returns the path to the project
    while [ "${folderList[count]}" != "" ]
    do
        if [ "$1" == "${folderList[count]}" ]; then
            echo ${folderList[$(( $count + 2 ))]}
            moved="1"
        fi
        count=$(( $count + 3 ))
    done

    # Returns all project names
    if [ "$moved" != "1" ]; then
        count=0
        while [ "${folderList[count]}" != "" ]
        do
            echoc 6 ${folderList[count]}
            echo - ${folderList[count+1]}
            count=$(( $count + 3 ))
        done
    fi
}

Usage

getFolders

En utilisant getFolders, vous disposez d'une liste de raccourcis, de descriptions et d'emplacements pour chaque dossier. Lorsque vous utilisez getFolders avec un raccourci, il affichera l'emplacement du dossier. Vous pouvez obtenir une liste des dossiers disponibles et leurs descriptions en appelant simplement getFolders sans paramètre

Exemple d'obtention du chemin du dossier

getFolders alias

les sorties

/path/to/alias/folder

Exemple d'obtention de dossiers disponibles.

getFolders

les sorties

alias
- Description of alias
alias2
- Description of alias2

gf

gf est un raccourci pour getFolders

gf alias2

les sorties

/path/to/alias2/folder

aller à

goto est un moyen simple de cd dans le dossier sélectionné.

goto alias

production

le cd s'est exécuté sur / path / to / alias / folder

/ chemin / vers / alias / dossier>

Pourquoi avoir plusieurs fonctions

Au cœur d'Unix et de Linux, vous avez de simples fonctions réutilisables qui peuvent être enchaînées ensemble. Je préfère cette méthode car elle ne vous déplace pas seulement vers un emplacement sélectionné mais est une fonction qui, par alias, retourne un chemin. Vous pouvez utiliser cette fonction pour faire quoi que ce soit à partir de ce point comme cd vers ce chemin.

Warner Michael
la source
0

Pensez à définir la CDPATHvariable d'environnement dans votre .bashrc ou .bash_profile. CDPATH prend la même forme délimitée par les deux-points que les autres PATHvariables similaires, et permet de cdprendre des raccourcis pour trouver vos répertoires. Par exemple:

$ mkdir -p /tmp/foo/bar/baz
$ CDPATH='/tmp/foo/bar'
$ cd baz
/tmp/foo/bar/baz
Kojiro
la source
0

vous pouvez configurer votre propre raccourci vers un répertoire spécifique. Par exemple, vous voulez aller dans un répertoire imbriqué, vous le faites généralement

cd / home / dir-1 / dir-2 / dir3 / dir4 / dir5 / dir6 / dir-target

vous utilisez généralement la commande cd, puis tapez tous les noms de répertoire ou vous pouvez ignorer la saisie (à l'aide du bouton TAB), mais cela prend encore quelques minutes.

Donc, pour gagner du temps, vous pouvez en faire un alias dans le terminal. Sa tâche unique pour configurer l'alias.

alias dir-target = '/ home / dir-1 / dir-2 / dir3 / dir4 / dir5 / dir6 / dir-target'

Maintenant, il vous suffit d' utiliser le nom d'alias ( dir-target ) pour vous déplacer dans votre répertoire cible.

Sanjay Mundhra
la source
0

La façon la plus rapide que j'ai trouvé est xdun programme « eXchange Annuaires » écrit par un Hollandais nommé Frank B. Brokken.

Il fonctionne en trouvant tous les chemins sur votre système de fichiers qui peuvent résoudre à une abréviation que vous avez saisi, par exemple , ulbpourrait représenter /usr/local/binsi ce dossier existe votre système:

% cx ulb
Multiple Solutions:
 1: /usr/lib/binfmt.d/
 2: /usr/local/bin/

En appuyant sur 2 vous êtes /usr/local/bin.

Il est vraiment vieux logiciels et ne sont plus disponibles à l'emplacement d'origine, aucun contact avec l'auteur, afin de l'empêcher d'être perdu, je le mets en repo Github:

https://github.com/mrkafk/exchange_directories

LetMeSOThat4U
la source
-1

J'utilise DGDIR (Répertoire Signets) pour le faire. Très agréable! http://www.linuxjournal.com/article/10585

Je moi ai modifié pour convenir à mon goût et plus facile à utiliser et plus claire cependant.

fstephens
la source
Bienvenue sur Ask Ubuntu! Bien que cela puisse théoriquement répondre à la question, il serait préférable d'inclure ici les parties essentielles de la réponse et de fournir le lien de référence.
fossfreedom