2012-08-30 8 views
31

Wenn ich ein Verzeichnis hinwollen up benutze ichgehen einige Verzeichnisse bis in Linux

cd ..

Aber wenn ich 7 Verzeichnisse hinwollen up ist es eine Möglichkeit, diese anderen zu tun, als nur sieben eingeben (7) mal cd ..?

+0

Um eine Ebene höher zu gehen, sind sowohl 'cd..' als auch' cd ..' äquivalent in Windows, aber linux ist zu streng und weist 'cd..' als ungültigen Befehl nur wegen fehlendem Platz zurück . – RBT

Antwort

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

Auch eine weitere nützliche Navigations Spitze, wenn zum Beispiel können sagen, Sie halten aus einem Verzeichnis Schalt (nennen wir es A) zu einem anderen (nennen Sie es B), das sind 7 Verzeichnisse in Ihrem Fall.

Also, wenn Sie im Verzeichnis A sind.

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

Das ist richtig zurück in das Verzeichnis A. bewegen - erweitert, um zum vorherigen Verzeichnis, das Sie in waren

+3

'CD-' Befehl ist interessant. Gibt es für sie gleichwertige Windows? – RBT

+0

Obwohl dies die "akzeptierte" Antwort ist, sehe ich, dass die Antwort von @ dav die robustere Lösung ist. Eine lange Liste von "../" ist sowohl belastend als auch fehleranfällig. Wenn Ihr Profil ein Alias-Skript zulässt, ist es besser skalierbar. Die Bash-Alias-Version behält auch die Unterstützung für "cd -" bei. – ZaydH

5

Sie können es tun, wie diese cd ../../../../../../../

Es gibt eine cool article über einige Hacks Sie anwenden können Sie die Navigation zu verbessern.

1

Hm, ich glaube nicht.

Aber man kann cd ../../../.. (und so weiter) statt 7 mal cd schreiben ..

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

können Sie pushd . verwenden sich an ein Verzeichnis zu erinnern und popd, um zurück zu gehen.

6

Wenn es einen Befehl gibt, verwende ich viel, ich werde nur einen Alias ​​machen.

könnten Sie

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

Dann einfach .. verwenden Sie können bis eine Ebene nach oben und ... gehen zwei Ebenen zu gehen.

6

Hier ist eine leichte Verbesserung, die ich gefunden habe:

Normalerweise, wenn Sie wieder ein Verzeichnis mit cd gehen .. Sie nach vorn ein Verzeichnis am Ende gehen. Um diese Arbeit zu machen, müssen Sie Funktionen verwenden, anstatt Aliase, so statt:

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

können Sie:

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

jedoch danach mit, es wird schnell klar, dass Sie vermissen Befehl Abschluss für diese Funktion, so dass es weit weniger nützlich als es sein könnte. Also ging ich zurück und fügte meine eigenen Bash-Vervollständigungsfunktionen für diese Funktion hinzu, die in Ihre ~/.bashrc oder irgendeine Datei (zB ~/.bash_completion) eingefügt werden können, die von Ihrem ~/.bashrc aufgerufen wird, wenn Sie dies vermeiden möchten Unordnung. Hier ist der Abschlusscode:

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

Machen Sie Alias ​​(in Ihnen ~ /.bashrc)

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

und Verwendung:

$ cd.. 7 

UPD: Oder mächtige Variante machen, cd dir namen in aktuellem Pfad:

# 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..' 

Verwendung:

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

Sie können diese Lösung versuchen. Es ist eine Arbeit für mich in Ordnung:

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

I alias in ~/.barsh Datei vorgenommen haben. Und das funktioniert gut für mich.
Beispiel, für drei Ordner.
$ cd `cde 3`

2

Sie könnten die folgende Funktion zu Ihrem .bashrc hinzufügen:

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

So ist die Nutzung würde einfach sein:

user ~ $ up 3 
user/$ 
+0

beste Antwort für langfristige Nutzung – Kyle

+0

Einschließlich "und" scheint nicht zu funktionieren. Ich habe es funktioniert, indem ich "und" lösche. Der Ansatz von @dav unten erlaubt "cd -" noch zu arbeiten, also würde ich sagen, es ist die bessere langfristige Antwort. – ZaydH

4

nicht erinnern Sie, wo ich kopiert diese Funktion, aber es funktioniert gut für mich (Sie können zum Beispiel .bashrc Datei einfügen)

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

z.B. Um 7 Verzeichnisse zu gehen, ist es notwendig, up 7

1

zu schreiben Diese nette Funktion unterstützt das Gehen in beide Richtungen.

Wenn Sie in /a/b/c/d dann 'bis 1' sind, werden Sie ergreifen, um /a/b/c, und so weiter. Das ist ziemlich Standard und in den meisten anderen Antworten abgedeckt.

Jetzt für den speziellen Teil; Negative Zahlen zu verwenden bringt Sie aus der anderen Richtung. Also, wenn Sie in /a/b/c/d sind, wird 'up -1' Sie zu /a und so weiter bringen.

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 
} 

Zum Download/Installation auf github.

1

für Fische Benutzer,

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

und speichern Sie es auf: ~/.config/Fisch/Funktionen/cdd.fish

und nur $ cdd 3 Um bis 3 Verzeichnisse zu gehen.

+1

Ich habe die Funktion so modifiziert, dass sie nur einmal cd aufruft. Dies bewahrt die Fähigkeit von "cd-", zum vorherigen Verzeichnis zurückzuspringen. –

Verwandte Themen