2012-08-30 21 views
31

Cuando quiero ir a un directorio arriba utilizoIr algunos directorios en Linux

cd ..

Pero cuando quiero ir 7 directorios arriba ¿Hay alguna manera de hacer esto que no sea simplemente escribiendo siete (7) veces cd ..?

+0

En una nota lateral, para subir un nivel tanto 'cd..' como' cd ..' son equivalentes en windows pero linux es demasiado estricto y rechaza el comando 'cd..' como comando inválido solo por falta de espacio . – RBT

Respuesta

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

También otra punta de navegación útil es si, por ejemplo, digamos que usted guarda el cambio de un directorio (llamarlo A) a otro (llámalo B) eso es 7 directorios arriba, en tu caso.

Así que si estás en el directorio A:.

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

que moverá a la derecha de nuevo a la Guía A. - expande al directorio anterior estaba en

+3

El comando 'cd -' es interesante. ¿Hay alguna ventana equivalente para la misma? – RBT

+0

Aunque esta es la respuesta "aceptada", veo que la respuesta de @dav a continuación es la solución más robusta. Una larga lista de "../" es onerosa y propensa a error. Si su perfil permite un script de alias, es más escalable. La versión de alias bash también conserva el soporte para "cd -". – ZaydH

5

Usted puede hacerlo de esta manera cd ../../../../../../../

Hay una cool article acerca de algunos trucos que se pueden aplicar para mejorar que la navegación.

1

Hm, no lo creo.

Pero se puede escribir cd ../../../.. (y así sucesivamente) en lugar de 7 veces cd ..

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

puede utilizar pushd . para recordar un directorio y popd para volver a él.

6

Si hay un comando que uso mucho, simplemente crearé un alias.

podría escribir

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

a continuación, puedes utilizar .. a subir un nivel y ... ir hasta dos niveles.

6

Aquí está una ligera mejoría que he encontrado:

Por lo general, cuando vuelva a un directorio con cd .., usted termina yendo hacia adelante un directorio después. Para que esto funcione, usted tiene que utilizar funciones en lugar de los alias, así que en vez de:

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

puede utilizar:

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

Sin embargo, después de usar esto, rápidamente se hace evidente que le falta completar el comando para esta función, por lo que es mucho menos útil de lo que podría ser. Por lo tanto, volví y agregué mis propias funciones de finalización de bash para esta función, que pueden pegarse en su ~/.bashrc o cualquier archivo (por ejemplo ~/.bash_completion) que se llama desde su ~/.bashrc si desea evitar desorden. Aquí está el código de finalización:

_..() 
{ 
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

Hacer alias (in you ~ /.bashrc)

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

y uso:

$ cd.. 7 

UPD: O hacer la variante más potente, cd dir nombre en camino actual:

# 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

Puede probar esta solución. Está bien el trabajo para mí:

#!/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

he hecho alias en el archivo ~/.barsh. Y esto funciona bien para mí.
Ejemplo, hasta tres carpetas.
$ cd `cde 3`

2

podría añadir la siguiente función a su .bashrc:

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

lo tanto, el uso sería simplemente:

user ~ $ up 3 
user/$ 
+0

mejor respuesta para el uso a largo plazo – Kyle

+0

Incluir "y" parece no funcionar. Lo tengo que trabajar eliminando "y". El enfoque de @dav a continuación permite que "cd -" aún funcione, por lo que diría que es la mejor respuesta a largo plazo. – ZaydH

4

No recuerdo desde donde copié esta función, pero funciona muy bien para mí (se puede poner en el archivo .bashrc por ejemplo)

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

p. Ej. Para ir a 7 directorios, es necesario escribir up 7

1

Esta ingeniosa función permite subir en ambas direcciones.

Si se encuentra en /a/b/c/d luego 'a 1' que se llevará a /a/b/c, y así sucesivamente. Eso es bastante estándar y está cubierto en la mayoría de las otras respuestas.

Ahora, para la parte especial; usar números negativos te lleva desde la otra dirección. Por lo tanto, si está en /a/b/c/d, 'arriba -1' lo llevará a /a, y así sucesivamente.

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 
} 

disponible para descargar/instalar en github.

1

para los usuarios de pescado,

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

y guardarlo en su: ~/.config/pescado/funciones/cdd.fish

y justo $ cdd 3 Para subir 3 directorios.

+1

Modifiqué la función para que solo llame a cd una vez. Esto conserva la capacidad de 'cd -' para saltar al directorio anterior. –

Cuestiones relacionadas