2012-08-30 14 views
31

Quando voglio fare un elenco up che usoVai alcune directory in Linux

cd ..

Ma quando voglio andare 7 directory fino Esiste un modo per fare questo diverso semplicemente digitando sette (7) volte cd ..?

+0

Su una nota a margine, per salire di un livello sia 'cd..' che' cd ..' sono equivalenti in windows ma linux è troppo rigido e rifiuta il comando 'cd..' come comando non valido solo a causa della mancanza di spazio . – RBT

risposta

48
cd ../../../../../../../ 

anche un altro suggerimento utile è di navigazione se per esempio diciamo che mantenere il passaggio da una directory (chiamarlo A) ad un altro (chiamalo B) che è 7 directory in su, nel tuo caso.

Quindi, se siete nella directory A:.

A> cd ../../../../../../../ 
B> // Now you're in directory B and want to go back to A 
B> cd - 

che si sposta a destra di nuovo alla directory A. - espande alla directory precedente eri in

+3

Il comando 'cd -' è interessante. Esiste un equivalente di Windows per lo stesso? – RBT

+0

Sebbene questa sia la risposta "accettata", vedo che la risposta di @ dav sotto è la soluzione più solida. Una lunga lista di "../" è sia onerosa che incline all'errore. Se il tuo profilo consente uno script di alias, è più scalabile. La versione alias di bash conserva anche il supporto per "cd -". – ZaydH

5

si può fare in questo modo cd ../../../../../../../

C'è un cool article su alcuni hack è possibile applicare per migliorare voi la navigazione.

1

Hm, non credo.

Ma è possibile scrivere cd ../../../.. (e così via), invece di 7 volte cd ..

3
for i in {1..7}; do cd ..; done 
7

è possibile utilizzare pushd . per ricordare una directory e popd per tornare ad essa.

6

Se c'è un comando che uso molto, farò semplicemente un alias.

È possibile digitare

alias ..='cd ..' 
alias ...='cd ../..' 

allora si può solo usare .. andare un livello superiore e ... andare due livelli fino.

6

Ecco un leggero miglioramento che ho trovato:

Di solito, quando si va indietro di un directory con cd .., si finisce per andare avanti di una directory dopo. Per fare questo lavoro, è necessario utilizzare le funzioni, piuttosto che gli alias, così invece di:

alias ..=”cd ../” 
alias ..2=”cd ../../” 

è possibile utilizzare:

..() 
{ 
cd ../[email protected] 
} 
..2() 
{ 
cd ../../[email protected] 
} 

Tuttavia, dopo aver utilizzato questo, diventa subito evidente che ti manca completamento del comando per questa funzione, rendendolo molto meno utile di quanto potrebbe essere. Così, sono tornato indietro e ho aggiunto le mie funzioni di completamento bash per questa funzione, che può essere incollata nel tuo ~/.bashrc o in qualsiasi file (es. ~/.bash_completion) chiamato dal tuo ~/.bashrc se vuoi evitare ingombrare. Ecco il codice di completamento:

_..() 
{ 
local cur=../${COMP_WORDS[COMP_CWORD]} 
COMPREPLY=($(compgen -d — $cur)) 
local i=${#COMPREPLY[*]} 
while [ $((--i)) -ge 0 ]; do 
COMPREPLY[$i]=$(echo ${COMPREPLY[$i]} | sed -r ‘s/(\.\.\/)*//’) 
done 
} 
complete -F _.. -o nospace -S/.. 

_..2() 
{ 
local cur=../../${COMP_WORDS[COMP_CWORD]} 
COMPREPLY=($(compgen -d — $cur)) 
local i=${#COMPREPLY[*]} 
while [ $((--i)) -ge 0 ]; do 
COMPREPLY[$i]=$(echo ${COMPREPLY[$i]} | sed -r ‘s/(\.\.\/)*//’) 
done 
} 
complete -F _..2 -o nospace -S/..2 
14

Crea alias (in te ~ /.bashrc)

function cd_up() { 
    cd $(printf "%0.0s../" $(seq 1 $1)); 
} 
alias 'cd..'='cd_up' 

ed impiego:

$ cd.. 7 

UPD: O fare variante più potente, cd per dir nome nel percorso corrente:

# cd up to n dirs 
# using: cd.. 10 cd.. dir 
function cd_up() { 
    case $1 in 
    *[!0-9]*)           # if no a number 
     cd $(pwd | sed -r "s|(.*/$1[^/]*/).*|\1|")  # search dir_name in current path, if found - cd to it 
     ;;            # if not found - not cd 
    *) 
     cd $(printf "%0.0s../" $(seq 1 $1));    # cd ../../../../ (N dirs) 
    ;; 
    esac 
} 
alias 'cd..'='cd_up'        # can not name function 'cd..' 

uso:

$ cd /home/user/documents/projects/reports/2014-10-01 
$ cd.. proj 
$ pwd 
> /home/user/documents/projects 
0

Si può provare questa soluzione. E 'il lavoro bene per me:

#!/bin/bash 
 

 
#this sctipt should take one parameter - number of steps. And do "cd" command step times. 
 
# example usage: cd `cde 3` 
 

 
NEW_PATH=$(pwd) 
 

 
step="../" 
 

 
upper="" 
 

 
for i in seq $1 
 
do 
 
     upper="$upper$step" 
 
done 
 

 
echo $upper

ho fatto alias nel file ~/.barsh. E questo funziona bene per me.
Esempio, fino a tre cartelle.
$ cd `cde 3`

2

si potrebbe aggiungere la seguente funzione al .bashrc:

# ~/.bashrc 
up() { 
    for D in $(seq 1 $1); 
    do 
     cd .. 
    done 
} 

Quindi l'utilizzo sarebbe semplicemente:

user ~ $ up 3 
user/$ 
+0

migliore risposta per l'uso a lungo termine – Kyle

+0

Includere "e" sembra non funzionare. L'ho fatto funzionare cancellando "e". L'approccio da @dav qui sotto permette a "cd -" di funzionare ancora, quindi direi che è la migliore risposta a lungo termine. – ZaydH

4

Non ricordo da dove ho copiato questa funzione, ma funziona perfettamente per me (è possibile inserire il file .bashrc ad esempio)

up() { local p= i=${1:-1}; while ((i--)); do p+=../; done; cd "$p$2" && pwd; }

ad es. per andare su 7 directory è necessario digitare up 7

1

Questa nifty funzione supporta la risalita in entrambe le direzioni.

Se siete in /a/b/c/d poi 'fino 1' vi porterà a /a/b/c, e così via. Quello è piuttosto standard e coperto nella maggior parte delle altre risposte.

Ora, per la parte speciale; l'uso di numeri negativi ti porta dall'altra direzione. Quindi, se ti trovi in ​​/a/b/c/d, "su -1" ti porterà a /a e così via.

function up() { 
    UP=$1 

    if [[ $UP =~ ^[\-0-9]+$ ]]; then 
     if ((UP<0)); then 
      UP=${UP#-} 
      cd $(echo $PWD | cut -d/ -f1-$((UP+1))) 
     else 
      cd $(printf "%0.s../" $(seq 1 ${UP})); 
     fi 
    fi 
} 

Disponibile per il download/installazione su github.

1

per gli utenti di pesce,

function cdd 
    for x in (seq $argv) 
    cd .. 
    end 
end 

e salvatelo sul vostro: ~/.config/pesce/funzioni/cdd.fish

e proprio $ cdd 3 Per salire 3 directory.

+1

Ho modificato la funzione in modo che chiami solo una volta cd. Ciò mantiene la capacità di 'cd -' di tornare alla directory precedente. –

Problemi correlati