Scorciatoia per passare a una determinata directory


12

Nel terminale Ubuntu mi ritrovo a dedicare molto tempo a passare a una determinata directory ogni volta che si avvia il computer. C'è un modo per semplificare questo processo? È possibile utilizzare alcuni tasti di scelta rapida o alcune modifiche rapide alla rubrica (come la composizione rapida su un telefono)?

 eg:
    cd 1:Changes to saved directory one

Quattro anni da quando questa domanda è stata posta e nessuno ha menzionato CDPATH fino ad oggi. :(
kojiro,

Suppongo che ciò possa dipendere dalla tua console, ma nel terminale di Kubuntu c'è un menu Segnalibri in cui posso solo aggiungere un segnalibro a una directory e saltare ad essa in quel modo!
Pixel

Risposte:


12

Esistono due opzioni:

  1. Se vuoi trovarti in una directory specifica ogni volta che apri un terminale bash, modifica il tuo ~/.bashrcfile e aggiungi la linea cd Directory, ad esempio cd ~/Desktop.

  2. Se vuoi avere diverse scorciatoie, puoi sempre usare le variabili globali, che puoi impostare nel tuo ~/.bashrcfile come segue export a=/tmpe poi sarai in grado di fare cd $aciò che ti porterebbe a /tmp.

Ricorda che dopo aver modificato il tuo .bashrcfile devi riavviare il terminale o aprirne uno nuovo.


3
Per evitare il riavvio del terminale è possibile utilizzare source ~/.bashrco, più breve, . ~/.bashrc.
Gerhard Burger,

18

Dai anche un'occhiata autojump, crea un database con le directory precedentemente visitate e quindi puoi saltare ad esso. Quindi per esempio hai

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

quindi se l'hai visitato una volta puoi saltarci sopra

j workstuff

o anche

j stuff

perché funziona anche con corrispondenze parziali. Se più di una directory corrisponde, salti a quella più visitata, se questa non è quella desiderata, ripeti il ​​comando per passare alla seconda.

Comunque va meglio! Se hai anche la directory

/home/user/stuff

e tu fai

j stuff 

e poi TabTabTabottieni (nell'ordine dei più visitati)

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

e quindi puoi semplicemente premere il numero della directory che desideri!

Per installare puoi semplicemente usare sudo apt-get install autojumpe quindi devi aggiungere

source /usr/share/autojump/autojump.bash

al tuo ~/.bashrc.

Maggiori informazioni qui: https://github.com/wting/autojump (anche istruzioni su come installarlo da src che ti fornisce la versione più recente)


1
crtl + r in un terminale cerca anche "corrispondenze parziali" nei comandi precedenti. Davvero utile.
Dan,


4

Anche se ci sono già alcune buone risposte, ho pensato di menzionare per completezza i vecchi pushde popdBash incorporati che ti consentono di spostarti molto rapidamente tra le directory in percorsi profondi nel tuo filesystem. Contrariamente ai autojumpsegnalibri menzionati da burger.ga , lo stack di directory creato utilizzando pushdè solo temporaneo.

Come il GNU note manuali , pushde popdsono builtin Bash usati per costruire una pila directory temporanea che è un

elenco delle directory visitate di recente. Il built-in pushd aggiunge le directory allo stack mentre cambia la directory corrente, e il popd builtin rimuove le directory specificate dallo stack e cambia la directory corrente nella directory rimossa. Il dirs incorporato mostra il contenuto dello stack di directory.

Ci vuole un po 'per abituarsi, ma ci sono molti tutorial utili là fuori in questo blog e questo sito per esempio. Non ci sono manpage separate per i comandi, poiché sono incluse nella manpage di Bash, ma per un rapido riferimento è possibile visualizzare la pagina GNU Bash .

La spiegazione più chiara è in questo articolo molto utile ed è esattamente il modo in cui uso pushde popd:

In primo luogo, utilizzare dirso dirs -lper elencare le directory nello stack e dirs -cper cancellare lo stack.

In un certo senso aggiungi ai segnalibri la posizione in cui vuoi tornare inserendo

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

e quindi è possibile aggiungere più directory allo stack, in modo da ottenere un elenco di directory come di seguito, che include 3 cartelle designate e la ~cartella principale:

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

In realtà non è necessario utilizzare popdsubito poiché ciò rimuove le directory dallo stack; la cosa migliore da fare è utilizzare pushdper ruotare lo stack, in modo da poter continuare a passare da una directory all'altra e ordinarli come desideri. Per ulteriori informazioni sull'utile rotazione dello stack, consultare la manpage Bash .

Se hai esattamente la disposizione dello stack come dirsmostra l'elenco sopra , pushd +3passa alla cartella Immagini specifica e posizionala in cima allo stack (è +3 e non +4 poiché non conti il ​​tuo ~nello stack della directory):

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

Quindi il prompt dice:

~/Pictures/Canon/2012_07_01$

Puoi continuare a farlo senza rimuoverli dallo stack, anche se qualsiasi cartella in cui cd, oltre a quelli aggiunti allo stack di directory pushd, modificherà lo stack di directory.

Dopo aver disposto lo stack di directory nell'ordine desiderato, è possibile utilizzare popdper scorrere rapidamente le directory e quindi tornare alla cartella principale; ad esempio, da Picturespossiamo tornare a Downloads:

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

e il prompt legge

~/Downloads/folder/interest$

In generale, la bellezza di questo è che puoi impostare lo stack di directory e l'ordine degli elementi al suo interno pushde quindi, dire che hai tre file da modificare in ciascuna di quelle directory, puoi tornare immediatamente a ciascuno con popdrimuovendoli dallo stack della directory. Quindi con il tuo ultimo popdtornerai a ~. Diventa particolarmente utile quando si hanno directory particolarmente profonde e si può usare per impostare lo stack di directory per spostarsi rapidamente tra di loro.

Inoltre, questa domanda contiene alcuni suggerimenti che potresti trovare utili quando lavori sulla riga di comando:


2

Anche se esiste un modo da riga di comando per farlo più velocemente, consiglierei personalmente di usare un'estensione Nautilus chiamata nautilus-open-terminal.

Innanzitutto installa il pacchetto nautilus-open-terminale aggiungi i segnalibri alle tue cartelle preferite con Nautilus. Su Nautilus 3.6. *, Dovrai accedere al menu a forma di ingranaggio e selezionare Aggiungi segnalibro a questa posizione .

inserisci qui la descrizione dell'immagine

Quindi utilizza i segnalibri Nautilus per andare più veloce nelle tue directory preferite e fai clic con il pulsante destro del mouse su uno spazio vuoto e seleziona Apri in Terminale .

inserisci qui la descrizione dell'immagine

Ora puoi avere sia la riga di comando che il file manager per accedere rapidamente alle tue directory preferite.


Il poster originale sta cercando di funzionare dal terminale ed è spesso più veloce lavorare dal terminale.
Haziz,

1
@haziz: Sì, ma le domande e le risposte di AskUbuntu dovrebbero essere utili non solo all'OP, ma specialmente per tutte le persone che l'hanno trovato sul web. Questa è una risposta preziosa per me.
Javier Rivera,

2

anc è stato progettato esattamente per quel caso d'uso.

https://github.com/tobimensch/anc

Ecco un estratto da 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]

Informativa completa: sono l'autore di anc.


1

Puoi inserire un alias nel tuo file .bashrc (o nel file di configurazione per la tua shell preferita, in genere si trovano nella tua home directory):

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

Un utile link informativo sull'utilizzo degli alias in bash è qui .


1

Ho creato un set di funzioni bash per questo e l'ho aggiunto al mio .bash_profile

copione

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
}

uso

getFolders

Usando getFolders hai un elenco di scorciatoie, descrizione e posizione per ogni cartella. Quando si utilizza getFolders con una scorciatoia, verrà visualizzata la posizione della cartella. È possibile ottenere un elenco di cartelle disponibili e le relative descrizioni semplicemente chiamando getFolders senza un parametro

Esempio di ottenere il percorso della cartella

getFolders alias

uscite

/path/to/alias/folder

Esempio di ottenere cartelle disponibili.

getFolders

uscite

alias
- Description of alias
alias2
- Description of alias2

gf

gf è una scorciatoia per getFolders

gf alias2

uscite

/path/to/alias2/folder

vai a

goto è un modo semplice per cd nella cartella selezionata.

goto alias

produzione

cd è stato eseguito nella cartella / path / to / alias /

/ Path / to / alias / cartella>

Perché avere più funzioni

Al cuore di Unix e Linux ci sono semplici funzioni riutilizzabili che possono essere concatenate. Preferisco questo metodo in quanto non ti sposta solo in una posizione selezionata, ma è una funzione che alias restituisce un percorso. Puoi usare questa funzione per fare qualsiasi cosa da quel punto come cd a quel percorso.


0

Valuta di impostare la CDPATHvariabile di ambiente nel tuo .bashrc o .bash_profile. CDPATH prende la stessa forma delimitata dai due punti che PATHassumono altre variabili simili e consente di cdprendere scorciatoie per trovare le tue directory. Per esempio:

$ mkdir -p /tmp/foo/bar/baz
$ CDPATH='/tmp/foo/bar'
$ cd baz
/tmp/foo/bar/baz

0

è possibile impostare il proprio collegamento in una directory specifica. Ad esempio, vuoi andare alla directory nidificata, in genere lo fai

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

di solito usi il comando cd e poi digiti tutti i nomi delle directory o potresti saltare la digitazione (usando il tasto TAB) ma ci vogliono ancora pochi minuti.

Quindi, per risparmiare tempo , puoi crearne uno alias nel terminale. È compito una tantum impostare l'alias.

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

Ora, devi solo usare il nome alias ( dir-target ) per spostarti nella directory di destinazione.


0

Il modo più rapido che ho trovato è xdun programma "eXchange Directories" scritto da un olandese di nome Frank B. Brokken.

Funziona trovando tutti i percorsi sul tuo filesystem che possono risolversi in un'abbreviazione che hai digitato, ad esempio ulbpotrebbe rappresentare /usr/local/binse tale cartella esiste nel tuo sistema:

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

Premendo 2 ci si trova dentro /usr/local/bin.

È un software davvero vecchio e non è più disponibile nella posizione originale, nessun contatto con l'autore, quindi per evitare che vada perso, l'ho messo nel repository Github:

https://github.com/mrkafk/exchange_directories


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.