Wechseln Sie zum x-ten Verzeichnisterminal

Wechseln Sie zum x-ten Verzeichnisterminal

Gibt es in einer Unix-Shell (insbesondere Ubuntu) eine Möglichkeit, das Verzeichnis in das x-te Verzeichnis zu ändern, das vom Befehl ls ausgegeben wurde? Ich weiß, dass Sie ein Verzeichnis auf mehrere Arten sortieren können, aber verwenden Sie die Ausgabe von ls, um das x-te Verzeichnis zu erhalten?

Eine Beispiel-Shell:

$ ls
$ first_dir second_dir third_really_long_and_complex_dir

wo ich in das dritte_wirklich_lange_und_komplexe_Verzeichnis wechseln möchte, indem ich 3 (oder 2 im richtigen Array-Format) übergebe. Ich weiß, dass ich einfach kopieren und einfügen könnte, aber wenn ich bereits die Tastatur verwende, wäre es einfacher, etwas wie „cdls 2“ oder so etwas einzugeben, wenn ich den Index kenne.

AKTUALISIEREN

Für alle, die das noch sehen: Ich habe diese Frage gestellt, als ich noch ein echter Linux-/Bash-Neuling war und nicht wusste, dass es so etwas wie die Tab-Vervollständigung gibt.

Antwort1

Das Hauptproblem bei cdeiner interaktiven Sitzung besteht darin, dass Sie im Allgemeinen das aktuelle Verzeichnis der Shell ändern möchten, die die Eingabeaufforderung verarbeitet. Das bedeutet, dass das Starten einer Unter-Shell (z. B. eines Skripts) nicht hilfreich wäre, da etwaige cdAufrufe die übergeordnete Shell nicht beeinflussen würden.

Abhängig von der Shell, die Sie verwenden, können Sie jedoch möglicherweise eineFunktionum dies zu tun. Zum Beispiel in 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]}"
}

Beachten Sie, dass ich mich in diesem Beispiel absolut weigere, die Ausgabe von zu analysieren ls.wegen vielen Gründen. Stattdessen lasse ich die Shell selbst eine Liste von Verzeichnissen (oder Links zu Verzeichnissen) abrufen ...

Allerdings vermute ich, dass die Verwendung dieser Funktion (oder irgendetwas in dieser Art) ein sehr guter Weg ist, sich selbst in ein riesiges Chaos zu stürzen - wie die Verwendung rmnach dem Wechsel in das falsche Verzeichnis. Die automatische Vervollständigung von Dateinamen ist schon gefährlich genug, ohne dass man sich dazu zwingen musszählen...

Antwort2

Ich habe eine Funktion dafür:

   Funktion cdi. {
       IFS=$'\n'
       SEITE=${1:-1}
       LPP=${2:-11}
       erste=$(( 1 + LPP * SEITE - LPP ))
       letzte=$((LPP * SEITE))
       wähle cd_into in $(find . -maxdepth 1 -type d -printf "%P\n" |\
             sed -n $erster,${letzter}p);
       Tun
           AUSFAHRT=-1;
           wenn [[ $REPLY == n ]]; dann sei PAGE=PAGE+1; cdi. $PAGE $LPP; EXIT=$?
         elif [[ $REPLY == p ]]; dann lass PAGE=PAGE-1; cdi. $PAGE $LPP ; EXIT=$?
         elif [[ $REPLY == m ]]; dann sei LPP=LPP*2; cdi. $PAGE $LPP ; EXIT=$?
         elif [[ $REPLY == l ]]; dann sei LPP=LPP/2; cdi. $PAGE $LPP ; EXIT=$?
         elif [[ $REPLY == q || $REPLY == 0 ]];dann returniere 0; fi

           wenn [ $EXIT -eq 0 ]; dann return 0; fi

           cd_into=${cd_into//\~/$HOME}
           wenn [ -d "$cd_into" ];dann
               cd "$cd_into"; returniere 0; sonst
               echo "Ups! \`$cd_into' ist kein Ordner (?)"
           fi
       Erledigt
       IFS nicht gesetzt
   }

Benutzen:

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

verwandte Informationen