Cambiar al terminal del directorio xth

Cambiar al terminal del directorio xth

¿Hay alguna forma en un shell de Unix (específicamente Ubuntu) de cambiar el directorio al directorio x que se imprimió desde el comando ls? Sé que puedes ordenar un directorio de varias maneras, pero ¿utilizar la salida de ls para obtener el directorio x?

Un caparazón de ejemplo:

$ ls
$ first_dir second_dir third_really_long_and_complex_dir

donde quiero pasar al tercer_really_long_and_complex_dir pasando 3 (o 2 en el formato de matriz adecuado). Sé que podría simplemente copiar y pegar, pero si ya estoy usando el teclado, sería más fácil escribir algo como "cdls 2" o algo así si conociera el índice.

ACTUALIZAR

Para cualquiera que todavía vea esto, creé esta pregunta cuando era realmente nuevo en Linux/bash y no me di cuenta de que existía la función de completar tabulaciones.

Respuesta1

El principal problema cden una sesión interactiva es que generalmente desea cambiar el directorio actual del shell que procesa el símbolo del sistema. Eso significa que iniciar un subshell (por ejemplo, un script) no ayudaría, ya que cualquier cdllamada no afectaría al shell principal.

Sin embargo, dependiendo del shell que esté utilizando, es posible que pueda definir unfunciónpara hacer esto. Por ejemplo en fiesta:

function cdls() {
    # Save the current state of the nullglob option
    SHOPT=`shopt -p nullglob`

    # Make sure that */ expands to nothing when no directories are present
    shopt -s nullglob

    # Get a list of directories
    DIRS=(*/)

    # Restore the nullblob option state
    $SHOPT

    # cd using a zero-based index
    cd "${DIRS[$1]}"
}

Tenga en cuenta que en este ejemplo me niego absolutamente a analizar el resultado de ls,por un número de razones. En lugar de eso, dejo que el shell recupere una lista de directorios (o enlaces a directorios)...

Dicho esto, sospecho que usar esta función (o cualquier cosa similar) es una muy buena manera de prepararse para un desastre enorme, como usarla rmdespués de cambiar al directorio incorrecto. El autocompletado de nombres de archivos ya es bastante peligroso, sin necesidad de obligarte a hacerlo.contar...

Respuesta2

Tengo una función para esto:

   función cdi. {
       IFS=$'\n'
       PÁGINA=${1:-1}
       LPP=${2:-11}
       primero=$(( 1 + LPP * PÁGINA - LPP ))
       último=$(( LPP * PÁGINA ))
       seleccione cd_into en $(find . -max Depth 1 -type d -printf "%P\n" |\
             sed -n $primero,${último}p);
       hacer
           SALIR=-1;
           si [[ $RESPUESTA == n ]]; luego deje PÁGINA=PÁGINA+1; cdi. $PÁGINA $LPP ; SALIR=$?
         elif [[ $RESPUESTA == p ]]; luego deje PÁGINA=PÁGINA-1; cdi. $PÁGINA $LPP ; SALIR=$?
         elif [[ $RESPUESTA == m ]]; entonces sea LPP=LPP*2; cdi. $PÁGINA $LPP ; SALIR=$?
         elif [[ $RESPUESTA == l ]]; entonces sea LPP=LPP/2; cdi. $PÁGINA $LPP ; SALIR=$?
         elif [[ $RESPUESTA == q || $RESPUESTA == 0 ]];luego devuelve 0; fi

           si [ $SALIDA -eq 0 ]; luego devuelve 0; fi

           cd_into=${cd_into//\~/$INICIO}
           si [ -d "$cd_into" ];entonces
               cd "$cd_into"; devolver 0; demás
               echo "¡Ups! \`$cd_into' no es una carpeta (?)"
           fi
       hecho
       IFS desarmado
   }

Usar:

$cdi.
1) .mozilla.nuevo 3) .swt 5) tmp 7) .vim 9) .ssh
2) .crack-attack 4) Descargas 6) .Eterm 8) .frozen-bubble 10) .irssi
Cual #?:

información relacionada