Mude para o terminal do diretório x

Mude para o terminal do diretório x

Existe uma maneira em um shell unix (especificamente Ubuntu) de alterar o diretório para o x-ésimo diretório que foi impresso no comando ls? Eu sei que você pode classificar um diretório de várias maneiras, mas usando a saída de ls para obter o x-ésimo diretório?

Um exemplo de shell:

$ ls
$ first_dir second_dir third_really_long_and_complex_dir

onde desejo passar para o third_really_long_and_complex_dir passando 3 (ou 2 no formato de array adequado). Eu sei que poderia simplesmente copiar e colar, mas se já estiver usando o teclado, seria mais fácil digitar algo como "cdls 2" ou algo parecido se eu conhecesse o índice.

ATUALIZAR

Para quem ainda está vendo isso, criei essa pergunta quando era realmente novo no Linux/bash e não percebi que existia o preenchimento de guias.

Responder1

O principal problema cdem uma sessão interativa é que geralmente você deseja alterar o diretório atual do shell que está processando o prompt de comando. Isso significa que lançar um sub-shell (por exemplo, um script) não ajudaria, já que qualquer cdchamada não afetaria o shell pai.

Dependendo de qual shell você está usando, no entanto, você poderá definir umfunçãopara fazer isso. Por exemplo no bash:

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]}"
}

Observe que neste exemplo me recuso absolutamente a analisar a saída de ls,por uma série de razões. Em vez disso, deixei o próprio shell recuperar uma lista de diretórios (ou links para diretórios)...

Dito isto, suspeito que usar esta função (ou qualquer coisa nesse sentido) seja uma boa maneira de se preparar para uma enorme bagunça - como usar rmdepois de mudar para o diretório errado. O preenchimento automático do nome do arquivo já é bastante perigoso, sem se forçar acontar...

Responder2

Eu tenho uma função para isso:

   função CDI. {
       SE=$'\n'
       PÁGINA=${1:-1}
       LPP=${2:-11}
       primeiro=$(( 1 + LPP * PÁGINA - LPP ))
       último=$((LPP * PÁGINA))
       selecione cd_into em $(find. -maxprofundidade 1 -type d -printf "%P\n" |\
             sed -n $primeiro,${último}p);
       fazer
           SAIR=-1;
           se [[ $RESPONDER == n ]]; então deixe PAGE=PAGE+1; CDI. $PAGE $LPP ; SAIR=$?
         elif [[ $REPLY == p ]]; então deixe PAGE=PAGE-1; CDI. $PAGE $LPP ; SAIR=$?
         elif [[ $REPLY == m ]]; então deixe LPP=LPP*2; CDI. $PAGE $LPP ; SAIR=$?
         elif [[ $REPLY == l ]]; então deixe LPP=LPP/2; CDI. $PAGE $LPP ; SAIR=$?
         elif [[ $RESPOSTA == q || $REPLY == 0 ]];então retorne 0; fi

           se [$EXIT -eq 0]; então retorne 0; fi

           cd_into=${cd_into//\~/$HOME}
           se [ -d "$cd_into" ];então
               CD "$cd_into"; retornar 0; outro
               echo "ops! \`$cd_into' não é uma pasta (?)"
           fi
       feito
       desativar IFS
   }

Usar:

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

informação relacionada