Schnelle Verzeichnisnavigation in der Bash-Shell

119

Ich möchte häufig zwischen Verzeichnissen wechseln, die sich in völlig unabhängigen Pfaden befinden, zum Beispiel /Project/Warnest/docs/und ~/Dropbox/Projects/ds/test/.

Aber ich möchte nicht die cd /[full-path]/ganze Zeit tippen . Gibt es Verknüpfungsbefehle zum Wechseln zu zuvor bearbeiteten Verzeichnissen?

Eine Lösung, die ich mir vorstellen könnte, besteht darin, Umgebungsvariablen bash .profilefür die häufig verwendeten Verzeichnisse und cdunter Verwendung dieser Variablen zu my hinzuzufügen .

Aber gibt es eine andere Lösung dafür?

saiy2k
quelle
Hierfür können auch symbolische Verknüpfungen hilfreich sein. en.wikipedia.org/wiki/…
user606723

Antworten:

135

Wenn Sie nur zwischen zwei Verzeichnissen wechseln, können Sie mit zwischen den Verzeichnissen wechseln cd -.

Chris Card
quelle
13
Wie mir das so lange entgangen ist, ist ein Rätsel. Vielen Dank für diesen tollen Tipp.
Mr. Shickadance
3
+1 Sicherlich einer meiner Favoriten und einer, den viele Experten "verpasst" haben.
Michael Durrant
62

Es gibt eine Shell-Variable CDPATHin bashund kshund cdpathin zsh:

CDPATH    The search path for the cd command. This is a colon-separated
          list of directories in which the shell looks for destination
          directories specified by the cd command.

So können Sie in Ihrem ~ / .bashrc einstellen:

export CDPATH=/Project/Warnest:~/Dropbox/Projects/ds

Dann cd docsund cd testbringt Sie zum ersten gefundenen solchen Verzeichnis. (Ich meine, auch wenn ein Verzeichnis mit dem gleichen Namen im aktuellen Verzeichnis vorhanden sein wird, CDPATHwird immer noch darauf zugegriffen. Wenn CDPATHmehr Verzeichnisse mit Unterverzeichnissen mit dem angegebenen Namen enthalten sind, wird das erste verwendet.)

Mann bei der Arbeit
quelle
16
Es sollte erwähnt werden, dass im Allgemeinen der erste Eintrag in $CDPATHsein soll .(ein expliziter Eintrag, dh :auch funktioniert). Andernfalls kommt es zu einem merkwürdigen Verhalten, bei dem CDPATHVerzeichnisse im aktuellen Arbeitsverzeichnis Vorrang vor Verzeichnissen haben, was Sie wahrscheinlich nicht möchten.
jw013
4
Ich mache so ziemlich das Gleiche, aber ohne die export. Auf diese Weise CDPATHwird nicht in Skripte exportiert, die möglicherweise seltsame oder schädliche Auswirkungen haben. Sehen Sie hier für weitere Diskussionen und Beispiele.
Telemachus
"bash und ksh und cdpath in zsh" ... und in tcsh (beantworte einfach eine darauf basierende Frage über Super User und fand diese, während du nach ähnlichen Antworten auf SE suchst).
Hennes
Das ist, glaube ich, POSIX-spezifiziert. Zumindest cdverweist das POSIX für darauf.
mikeserv
48

Etwas anderes, das Sie versuchen könnten, ist ein Tool namens Autojump . Es verwaltet eine Datenbank mit Aufrufen zu seinem Alias ​​( jstandardmäßig) und versucht, intelligente Entscheidungen darüber zu treffen, wohin Sie möchten. Wenn Sie beispielsweise häufig Folgendes eingeben:

j ~/Pictures

Sie können Folgendes verwenden, um zur Not dorthin zu gelangen:

j Pic

Es ist für Debian und Ubuntu verfügbar und wird pro Benutzer ~/.bashrcoder ~/.zshrcstandardmäßig mitgeliefert .

Kyle Smith
quelle
5
Autojump ist wahrscheinlich das beste Tool dafür. Es dauert eine Weile, bis die Datenbank mit den allgemeinen Verzeichnissen aufgebaut ist. Aber ich denke, Sie werden feststellen, dass Sie ohne dieses Tool nicht leben können. Ich weiß, dass ich mich jedes Mal verkrüppelt fühle, wenn ich auf dem Computer eines anderen bin.
Quodlibetor
1
danke liebe dieses Tool! Und obwohl cd -es praktisch ist zu wissen, ob Sie es bereits wissen, halte ich dies für eine viel bessere Lösung als die aktuelle Top-Antwort.
User
Systemweit auf welchen Systemen installiert?
Strg-Alt-Delor
1
@richard Es ist als Paket (z. B. apt-get install autojumpin Ubuntu, aber auch für viele andere, wie auf ihrer Seite dokumentiert) für die systemweite Installation verfügbar, aber jeder Benutzer muss es in seine Shell-Umgebung laden, damit es die CD überschreiben kann, um den Überblick zu behalten wohin du gehst
nealmcb
Es ist wichtig zu sagen, source /usr/share/autojump/autojump.shdass ~ / .bashrc hinzugefügt werden sollte, damit der automatische Sprung funktioniert .
Pablo A
39

Wenn es sich um eine kleine Anzahl von Verzeichnissen handelt, können Sie pushdzwischen diesen wechseln:

# starting point
$ pwd
/Project/Warnest/docs
# add second dir and change to it
$ pushd ~/Dropbox/Projects/ds/test
~/Dropbox/Projects/ds/test /Project/Warnest/docs
# prove we're in the right place
$ pwd
~/Dropbox/Projects/ds/test
# swap directories
$ pushd
/Project/Warnest/docs ~/Dropbox/Projects/ds/test

Im Gegensatz dazu cd -können Sie dies mit mehr als zwei Verzeichnissen verwenden


Dem Vorschlag von Noach folgend, verwende ich jetzt Folgendes:

function pd()
{
    if [[ $# -ge 1 ]];
    then
        choice="$1"
    else
        dirs -v
        echo -n "? "
        read choice
    fi
    if [[ -n $choice ]];
    then
        declare -i cnum="$choice"
        if [[ $cnum != $choice ]];
        then #choice is not numeric
            choice=$(dirs -v | grep $choice | tail -1 | awk '{print $1}')
            cnum="$choice"
            if [[ -z $choice || $cnum != $choice ]];
            then
                echo "$choice not found"
                return
            fi
        fi
        choice="+$choice"
    fi
    pushd $choice
}

Beispielverwendung:

# same as pushd +1
$ pd 1

# show a prompt, choose by number
$ pd
 0 ~/Dropbox/Projects/ds/test
 1 /Project/Warnest/docs
 2 /tmp
? 2
/tmp ~/Dropbox/Projects/ds/test /Project/Warnest/docs

# or choose by substring match
$ pd
 0 /tmp
 1 ~/Dropbox/Projects/ds/test
 2 /Project/Warnest/docs
? doc
/Project/Warnest/docs /tmp ~/Dropbox/Projects/ds/test

# substring without prompt
$ pd test
~/Dropbox/Projects/ds/test /Project/Warnest/docs /tmp

usw. Offensichtlich dient dies nur zum Drehen durch den Stapel und behandelt nicht das Hinzufügen neuer Pfade - vielleicht sollte ich es umbenennen.

Nutzlos
quelle
6
Oh, ich wusste über pushdund popdfür die Durchquerung, aber nicht, dass Pushd drehen konnte, was bisher verwendet wurde ...
Izkata
14

Ich benutze aliasbashrc, um diese CDs zu machen.
sowie:

alias wdoc='cd ~/Project/Warnest/docs'
alias dstest='cd ~/Dropbox/Projects/ds/test'
Felix Yan
quelle
Ist bashrc eine Datei wie .profile? in denen muss ich diese zeilen einfügen?
Saiy2k
~/.bashrcoder /etc/bash.bashrc. Ich habe vorher nicht verwendet .profile, so weiß nicht, die Beziehung zwischen ihnen :-(
Felix Yan
scripts bashrc wird jedes Mal gestartet, wenn Sie das Terminal öffnen. Profil mit dem Start.
fügte diese Zeilen zu meinem .bash_profileund es funktioniert super .. thx :)
saiy2k
Ich habe mehrere spezifische Projektordner, in die ich regelmäßig gehe. Dies ist der einfachste Weg, sie einzurichten und zu verwalten. Außerdem ergibt sich für mich die absolut geringste Anzahl von Zeichen, die von allen Lösungen hier eingegeben wurden. KUSS! :-)
Moodboom
11

Ich habe ein Skript gefunden (normalerweise acd_funch.sh), das dieses Problem für mich gelöst hat. Mit dieser Option können cd --Sie die letzten 10 von Ihnen verwendeten Verzeichnisse anzeigen. Es sieht ungefähr so ​​aus:

0  ~/Documents/onedir
1  ~/Music/anotherdir
2  ~/Music/thirddir
3  ~/etc/etc

Um ~/Music/thirddirnur zu tippencd -2

Verweise

ANMERKUNG: Dieses Skript wurde ursprünglich in einem Linux-Gazette-Artikel veröffentlicht, der hier verfügbar ist: acd_func.sh - erweitert die bash-CD, um den Verlauf der besuchten Verzeichnisnamen zu speichern, anzuzeigen und darauf zuzugreifen .

Dean
quelle
Das gleiche Skript wurde auch im Linux Gazette, Ausgabe 109, Dezember 2004 veröffentlicht .
Serge Stroobandt
@Dean Der Link führt zu einem Musikvideo und besagt, dass Geocities geschlossen wurde.
somethingSomething
1
@somethingSomething Alternative Links hinzugefügt.
Dean
Geschichte | grep cd
user2180794
10

Probieren Sie die cdable_varsShell-Option in bash aus. Sie schalten es mit ein shopt -s cdable_vars.

Dann müssen Sie Ihre Variablen einstellen export dir1=/some/path. und schließlich cd dir1, etc. Sie können es dann in Ihr setzen ~/.bashrc, um es haften zu lassen.

Wojtek Rzepala
quelle
10

Verwenden Sie "pushd -n " (vorausgesetzt, Sie verwenden bash).

Fügen Sie zu Ihrer ~ / .bashrc hinzu:

pushd -n /Project/Warnest/docs/
pushd -n ~/Dropbox/Projects/ds/test/

dann,

cd ~ ist dein Zuhause,

cd ~1 ist ~/Dropbox/Projects/ds/test/

cd ~2 ist /Project/Warnest/docs/

Sie können verwendet werden ~1, ~2usw. auf genau die gleiche Art und Weise , wie ~.

Eelvex
quelle
7

Hier gibt es viele gute Vorschläge. Welche Option verwendet werden soll, hängt davon ab, ob Sie eine kleine feste Liste von Verzeichnissen haben, zwischen denen Sie wechseln, oder ob Sie nach einer allgemeineren Lösung suchen.

Wenn es sich um eine kleine feste Liste handelt, ist es am einfachsten, einfache Aliase (wie von Felix Yan vorgeschlagen) einzurichten.

Wenn Sie nach einer allgemeineren Lösung suchen (dh nach vielen verschiedenen Verzeichnissen, die sich im Laufe der Zeit ändern), würde ich pushd und popd verwenden (wie von Useless vorgeschlagen). Ich persönlich finde, dass die Standardeinstellung von pushd / popd schwierig zu verwenden ist, insbesondere, wenn Sie zwischen vielen Ordnern wechseln. Ich habe jedoch ein paar Verbesserungen vorgenommen, die es mir viel einfacher machen. Fügen Sie Ihrem bashrc Folgendes hinzu:

alias dirs='dirs -v'
pd () 
{ 
    if [ "$1" ]; then
        pushd "${1/#[0-9]*/+$1}";
    else
        pushd;
    fi > /dev/null
}
  • Verwenden Sie pd(als Kurzform von pushd), um zu einem neuen Ordner zu springen und sich zu erinnern, wo Sie sich befanden.
  • Verwenden Sie dirs, um die Liste der gespeicherten Verzeichnisse anzuzeigen.
  • Mit pd 3zu Verzeichnisnummer 3 springen.

Beispiel Verwendung:

$ PS1='\w\$ '   ## just for demo purposes
~$ pd ~/Documents/data
~/Documents/data$ pd ../spec
~/Documents/spec$ pd ~/Dropbox/Public/
~/Dropbox/Public$ pd /tmp
/tmp$ pd /etc/defaults/
/etc/defaults$ dirs
 0  /etc/defaults
 1  /tmp
 2  ~/Dropbox/Public
 3  ~/Documents/spec
 4  ~/Documents/data
 5  ~
/etc/defaults$ pd 2
~/Dropbox/Public$ dirs
 0  ~/Dropbox/Public
 1  ~/Documents/spec
 2  ~/Documents/data
 3  ~
 4  /etc/defaults
 5  /tmp
~/Dropbox/Public$ pd 4
/etc/defaults$ dirs
 0  /etc/defaults
 1  /tmp
 2  ~/Dropbox/Public
 3  ~/Documents/spec
 4  ~/Documents/data
 5  ~
/etc/defaults$ pd 3
~/Documents/spec$ popd
~/Documents/data ~ /etc/defaults /tmp ~/Dropbox/Public
~/Documents/data$ 
Noach
quelle
6

Das Folgende schien in dem Fall zu funktionieren, in dem ich es getestet habe, und Sie können Ihre Verzeichnisnamen einfach als Symlinks in ~ / Bookmarks ablegen:

mkdir "$HOME/Bookmarks"
ln -s /tmp "$HOME/Bookmarks/testdir"

function ccd() { cd $(readlink "$HOME/Bookmarks/$1") ; }

ccd testdir && echo $PWD
# gives /tmp
Ulrich Schwarz
quelle
dass ccd () -Funktion muss in der Terminal-Eingabeaufforderung oder woanders eingegeben werden? Kannst du uns das erklären?
Saiy2k
1
@ saiy2k: Entschuldigung, ja. Die functionLinie geht in .bashrc (Sie es in Ihrem Terminal eingeben können zu testen, aber es wird verschwunden sein , wenn Sie das Fenster schließen), bevor die Linien den Testfall von „testdir“ zu einem Namen für einzurichten /tmp, und die letzte Zeile ist der Test, um zu sehen, ob es funktioniert.
Ulrich Schwarz
6

Du könntest es schlimmer machen als j2 .

Aus der README:

Sie verbringen viel Zeit damit, in einem komplexen Verzeichnisbaum herumzuspielen?

j verfolgt, wo Sie waren und wie viel Zeit Sie dort verbracht haben, und bietet eine bequeme Möglichkeit, zu den Verzeichnissen zu springen, die Sie tatsächlich verwenden.

Ich benutze es ausgiebig und empfehle es.

phildobbin
quelle
5

Ich würde empfehlen , zsh zu verwenden , diese Shell als sehr gute TAB-Vervollständigung für Verzeichnisse, Dateien und sogar Optionen für die meisten CLI-Programme.

Ich benutze diese Shell seit Jahren und würde die Funktionalität vermissen, wenn sie weg wäre. Das Schreiben von Skripten für zsh macht auch viel Spaß, da eine große Anzahl von Einzeilern Ihnen jeden Tag helfen kann.

Polemon
quelle
Es ist nicht erforderlich, für die TAB-Vervollständigung auf zsh zu wechseln, da bash alles gleich hat. Für andere Funktionen vielleicht aber nicht dafür.
Peer Stritzinger
1
@PeerStritzinger Bash hat diese Funktionalität in BASH 4.0 eingeführt, liegt aber im Vergleich zu zsh noch weit zurück. "Egal" zu sagen ist sicherlich falsch.
Polemon
Nun, zsh ist natürlich die übershell, aber nur für die Tab-Vervollständigung muss nichts geändert werden (die Frage wurde nach bash gestellt). Außerdem wurde Bash 4.0 vor ca. 3 Jahren eingeführt ...
Peer Stritzinger
5

Nach meiner Erfahrung besteht die größte Geschwindigkeit beim Navigieren in einer Shell in der Verwendung der Verlaufssuchfunktion. In Bash können Sie in Ihrem Befehlsverlauf rückwärts suchen, indem Sie Ctrl+ drücken Rund ein Muster eingeben . Dieses Muster wird dann mit vorherigen Einträgen in Ihrem Verlauf abgeglichen - es können cdBefehle oder andere Operationen sein - und Vorschläge werden während der Eingabe gemacht. Drücken Sie einfach die Eingabetaste, um den vorgeschlagenen Befehl erneut auszuführen. Das heißt reverse-search-historyin Bash und ich liebe es. Das erspart mir viele Tastenanschläge und schont meinen internen Speicher.

Es ist eine gute Sache , weil man nur etwas kleinen Teil eines Befehls zu erinnern, wie Dropoder Wazwischen den beiden Historieneinträgen zu unterscheiden cd ~/Dropbox/Projects/ds/test/und cd /Project/Warnest/docs/.


quelle
5

Ich benutze auch diese Aliase (füge sie zu ~ / .bashrc hinzu):

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

Es ist viel schneller, mit ihnen in das übergeordnete Verzeichnis zu wechseln (es löst jedoch nur die Hälfte der Navigation).

reimai
quelle
1
Dies sind hilfreiche Aliase, aber ich bin nicht ganz sicher, ob sie den Anforderungen des OP entsprechen. Sie könnten erwägen, Ihre Antwort zu erweitern, um vorzuschlagen, wie diese für das OP-Problem direkt hilfreich sein könnten.
HalosGhost
4

Wenn Sie zsh verwenden:

  • du musst nicht tippen cd, tippe einfach den Verzeichnispfad ( /foo/bar/baz<Enter>gleich cd /foo/bar/baz<Enter>)

    erfordert auto_cddie Einstellung einer Option

  • Sie können abgekürzte Pfade mit Tabkey /u/sh/pi<Tab>erweitern ( erweitert auf /usr/share/pixmaps; funktioniert auch für Dateinamen)
Andrei Dziahel
quelle
3
Bash 4 hat gewonnen shopt -s autocd, es ist also keine reine Zsh-Güte mehr.
Gilles
4

Es gibt ein ziemlich nettes Tool für schnelle Verzeichnisänderungen:

xd - eXtra fast Directory changer http://xd-home.sourceforge.net/xdman.html

ein wenig umständlich ist , dass man es in der Bash - Profil oder ähnlich , wie es nur eine Karte brauchen gibt das Verzeichnis

# function to do `cd` using `xd`
# -g turns generalized directory search command processing on
# which improves the whole thing a bit
f() 
{
        cd `/usr/bin/xd -g $*`
}

Sie können Dinge tun wie:

# change to /var/log/a* (gives you a list to choose from)    
f vla
# to skip the list and go directly to /var/log/apache2
f vlapach
Null
quelle
Ändern Sie die Funktion in f() { cd "$(xd -g "$@")"; }, um Verzeichnisse und Leerzeichen in den Argumenten in korrekt zu behandeln xd(der Pfad wird wahrscheinlich nicht benötigt). Wenn Sie niemals xdauf andere Weise verwenden, können Sie dies alternativ tun xd() { cd "$(command xd -g "$@")"; }(alternativ /usr/bin/xdanstelle von verwenden command xd- Sie können immer ausführen, command xd …wenn Sie es umgehen müssen).
Adam Katz
4

Sie sollten niemals den vollständigen Pfad in die Shell eingeben. Sie können immer verwenden:

soffice /P*/W*/*/mydoc*

Anstatt von

soffice /Project/Warnest/docs/mydoc.odt
gena2x
quelle
1
Dies ist wie das Ausfüllen von Tabs, aber in jeder Hinsicht schlimmer
Michael Mrozek
Sie können dies nicht mit einer Registerkarte tun, die mit der gleichen Anzahl von Tastendrücken abgeschlossen ist, es sei denn, Project ist nur eine Datei, die mit P usw. beginnt. Außerdem müssen Sie jedes Mal mit * auf den Abschluss warten, ohne warten zu müssen.
gena2x
Ich denke, Sie haben es rückwärts - Sie können es nicht tun, es P*sei denn, Project ist die einzige Datei, die mit P beginnt. Die Tab-Vervollständigung kann zyklisch erfolgen (standardmäßig in den meisten Shells; Sie müssen die Tabs menu-completein Bash neu binden ) und wird in einfachen Fällen sofort aufgelöst Auf so etwas muss man nicht warten
Michael Mrozek
In Bezug auf "Sie können es nicht tun" - Sie können es versuchen, Sie verpassen den ganzen Punkt, wenn Sie denken, dass Sie es nicht können. Versuchen Sie es mit echo / u * / b * / g ++
gena2x
1
Ich verstehe, was du meinst, es ist schneller, solange du sicher bist, dass du einen eindeutigen Pfad eingegeben hast, aber so etwas /P*/W*/*/mydoc*klingt, als würde es gut funktionieren, bis du eines Tages zufällig eine andere Datei erstellst, die zu diesem Glob passt, und plötzlich endest du beide gleichzeitig öffnen. /u*/*/g++ist beeindruckend wenige Zeichen, aber hoffentlich ist nichts anderes in einem der Unterordner eines meiner Stammordner beginnend mit ubenannt g++. (Als netter Kompromiss können Sie in einigen Shells mithilfe der Tabulatortaste die Globs direkt erweitern.)
Michael Mrozek
3

Es gibt auch OLDPWDeine Umgebungsvariable, die gemäß IEEE 1003.1 (POSIX) bei jedem cdWechsel des Arbeitsverzeichnisses mit dem vorherigen Arbeitsverzeichnis aktualisiert werden sollte (für die Neugierigen Zeile 80244 von Seite 2506 von IEEE 1003.1-2008).

njsg
quelle
3

Es gibt auch eine "wcd" -App, die speziell für diesen Zweck erstellt wurde (ebenfalls auf cygwin portiert, da ich daran beteiligt bin). Sie können damit Verknüpfungen und Lesezeichen für Verzeichnisse erstellen. Unterstützt auch Platzhalter. Das Lesen der Manpage und der Dokumente in / usr / share / wcd sollte sehr hilfreich sein.

http://manpages.ubuntu.com/manpages/hardy/man7/wcd.7.html

Sam
quelle
3

cdargs ist das effizienteste Tool zum Speichern von Lesezeichen in einem Verzeichnis: http://www.youtube.com/watch?v=uWB2FIQlzZg

Emon
quelle
Handelt es sich um ein Produkt, mit dem Sie in Verbindung stehen?
Kazark
Danke, dass du mich auf cdargs hingewiesen hast. Einfach sudo apt-get cdargsauf Ubuntu. Übrigens ist das YouTube-Video wirklich schlecht, aber das Tool ist großartig.
DavidG
3

Try fastcd ( https://github.com/frazenshtein/fastcd ) Setzt einen Hook, der besuchte Verzeichnisse von der Bash aufzeichnet. Und setzt das Skript als "j" -Alias, der Ihnen die zuletzt besuchten Verzeichnisse anzeigt und die Möglichkeit bietet, schnell eine CD zu erstellen (beginnen Sie mit der Eingabe, um Verzeichnisse zu filtern). Es ist eine Änderung von .bashrc erforderlich, um den Alias ​​"j" zu erstellen.

Werkzeug bekommen

cd ~; mkdir Soft; cd Soft
git clone https://github.com/frazenshtein/fastcd

Installieren Sie die erforderlichen Module

pip install --user urwid

Quell die set.sh Datei in deinen bashrc

echo -e "\nsource /home/$USER/Soft/fastcd/set.sh\n" >> ~/.bashrc

Und aktualisiere bashrc

source ~/.bashrc

Dann geben Sie einfach "j" in die Konsole ein

Sam Toliman
quelle
Wie funktioniert das? Wenn es sich um Aliase handelt, was kann dieses Tool für Sie tun, das Sie nicht manuell bearbeiten können .bashrc?
G-Man
Es wird ein Daemon gestartet, der besuchte Verzeichnisse in ~ / .fastcd für gestartete Shells (Bash) aufzeichnet. "j" startet ein Tool, das Ihnen die zuletzt besuchten Verzeichnisse anzeigt und die Möglichkeit bietet, schnell CDs zu erstellen. Es ist eine Änderung von .bashrc erforderlich, um den Alias ​​"j" zu erstellen. Sie können Quellcode für weitere Informationen sehen, ich denke
Sam Toliman
Danke für die schnelle Antwort. Dies ist die Art von Informationen, die in der Antwort enthalten sein sollten. Bitte bearbeiten Sie Ihre Antwort, um diese Informationen aufzunehmen.
G-Man
3

Ich hatte die gleiche Frage und fand zuerst diese Antwort . Ich habe das Dienstprogramm z ( https://github.com/rupa/z ) installiert .

Dies ist genau das, wonach Sie suchen, denn z lernt von Ihren CD-Befehlen und verfolgt die Verzeichnisse nach dem Prinzip der Häufigkeit (häufig und aktuell). Nachdem Sie beide CD-Befehle einmal ausgeführt haben, können Sie Folgendes tun:

z docs
z ds

zu springen /Project/Warnest/docs/und ~/Dropbox/Projects/ds/test/sind. Die Argumente für z sind reguläre Ausdrücke, sodass Sie nicht einmal einen vollständigen Ordnernamen eingeben müssen.

saroele
quelle
2

Ich verwende seit vielen Jahren mein eigenes Dienstprogramm cdhist , um dies zu verwalten. Es wird Ihr cd-Befehl aliasisiert und automatisch ein Verzeichnisstapel erstellt.

bulletmark
quelle
2

Mit können Sie exportIhren Verzeichnispfaden Variablen zuweisen und sie dann referenzieren.

export dir1=/Project/Warnest/docs/
export dir2= ~/Dropbox/Projects/ds/test/
cd $dir1
cd $dir2
Fahad Naeem
quelle
Ja, das reicht für ein paar Lieblingsverzeichnisse. Es müssen keine weiteren Dienstprogramme installiert werden. Schreiben Sie einfach die exportAussagen in Ihre ~/.bashrc, und sie werden immer verfügbar sein.
wisbucky
1

Einige Vorschläge hier:

Ganz direkt, ich werde einen Alias ​​in die .profile-Datei einfügen

vi ~/.profile
alias dir1='cd /myhome/onedir'
alias dir2='cd /jimmy/anotherdir'

Dann benutze $ dir1 oder dir2, kann cd

Wenn Sie immer nur in zwei Richtungen wechseln. Mit cd -wird zwischen ihnen gewechselt.

Dan
quelle
1

Die Lösung, die ich für diese Situation benutze, ist screen. Startbildschirm und für jedes Verzeichnis ein Fenster mit erstellen C-a cund dorthin navigieren. Wechseln Sie zwischen Fenstern / Verzeichnissen mit C-a noder C-a p. Benennen Sie die Fenster mit C-a A. Dann können Sie mit eine Liste Ihrer Fenster C-a "öffnen und mit der Fensternummer oder dem Fensternamen navigieren. Da dies der screenFall ist , können Sie sich aus der Sitzung lösen, um Speicherplatz zu sparen und die Verbindung später mit derselben Konfiguration wieder herzustellen.

David R. McWilliams
quelle
1

Es scheint, dass Sie im Grunde genommen eine Projektdatei für Ihren Workflow benötigen. Mit Verzeichnissen, die zu Ihrer Aktivität gehören, wie in einer Programmier-IDE. Probieren Sie Zsh Navigation Tools und das dortige Tool n-cdaus. Es ermöglicht Ihnen, durch die zuletzt besuchten Ordner zu navigieren und ein HotlistVerzeichnis Ihrer Wahl zu definieren:

n-cd

n-cd kann an eine Tastenkombination gebunden werden mit:

zle -N znt-cd-Widget

bindkey "^ T" znt-cd-widget

Adam Lisson
quelle
1

TL; DR

  1. Verwenden Sie eine Fishfür interaktive Shell , die Sie sofort ermächtigen ( fish> zsh> bash).
  2. Verwendung POSIX/ Bashfür Skripting , die die am weitesten unterstützten Syntax ist ( POSIX> Bash> Zsh> Fish).

Muscheln

Nachdem ich hier verschiedene Shells getestet habe, ist mein Feedback (in der Reihenfolge des Testens / der Annahme):

  • Bash:
    • Auto-Vervollständigung: Grundlegend;
    • Pfaderweiterung: nein;
    • Scripting: ausgezeichnet.
  • Zsh+ oh-my-zsh:
    • Autovervollständigung: gut (durchfahren);
    • Pfaderweiterung: ja ( cd /e/x1cd /etc/X11/);
    • Scripting: gut.
  • Fish+ oh-my-fish(aktuell) ist das Beste aus der Box:
    • Auto-Vervollständigung: native und unterstützte Optionen;
    • Pfaderweiterung: ja;
    • Scripting: zu viel Unterschied zu POSIX-kompatiblen.

Verwenden Sie aussagekräftige Aliase

Jede Shell kann mit functionund erweitert werden alias. Hier sind die, die ich im Zusammenhang mit Ihrem Problem verwende (POSIX-kompatibel):

back () {  # go to previous visited directory
        cd - || exit
}

up () {  # go to parent directory
        cd ..|| exit
}

Es gibt einfache, aber wirklich aussagekräftige Funktionen, die sich leicht merken und automatisch vervollständigen lassen.

Kenne deine Muschel

Konfigurieren Sie CDPATHIhre am häufigsten verwendeten Verzeichnisse hinzufügen (zB ~/projects/, /etc/init.d/) , so dass Sie können , um sie schnell zu springen.

Weitere Informationen finden Sie in der Antwort zur HandarbeitCDPATH .

Hangout und lesen

Édouard Lopez
quelle
Wenn eine Shell-Funktion aufgerufen wird exit, verlassen Sie die interaktive Shell. Diese "aussagekräftigen Aliase" könnten einfach sein alias back='cd -'und alias up='cd ..'- aber keine Sorge, diese Befehle werden niemals false zurückgeben (kein vorheriges Verzeichnis - es schickt Sie nach Hause! Bereits im Root-Verzeichnis? Es ist ein No-Op!) Und daher werden Sie niemals beendet . Berücksichtigen Sie auch alias back='cd $OLDPWD'(beachten Sie die einfachen Anführungszeichen), da es keine Ausgabe hat ( cd -teilt Ihnen mit, wohin es Sie sendet, was wahrscheinlich unnötig ist, da Ihre Eingabeaufforderung diese Informationen enthält)
Adam Katz
1

ancist ein cmd-Linientool (kurz für anchor), das Lesezeichen für Verzeichnisse speichert. (bisher nur mit bash getestet)

In deinem Fall:

anc a /Project/Warnest/docs/ ~/Dropbox/Projects/ds/test/

Dadurch werden beide Verzeichnisse zur Ankerliste (think bookmarks) hinzugefügt

Jetzt, wenn Sie /Project/Warnest/docs/von einem beliebigen Ort Ihres Systemtyps zu einem anderen springen möchten :

anc Warn

und wenn du zum Tippen springen willst ~/Dropbox/Projects/ds/test/:

anc ds test

Neben dem Abgleichen von Text mit den mit Lesezeichen versehenen Pfaden bietet anc viele weitere praktische Möglichkeiten, um in Verzeichnissen zu navigieren.

anc i

Startet den interaktiven Modus, in dem alle Lesezeichen nach Nummer aufgelistet werden. Sie müssen also nur die Nummer eingeben

Wenn Sie Folgendes eingeben:

anc Pro[TAB]

Eine Liste mit allen Lesezeichen (in Ihrem Fall beide Lesezeichen) wird angezeigt und Sie können mit den Pfeiltasten aus dieser Liste auswählen. Dies ist eine sehr schnelle und intuitive Methode.

Holen Sie sich auf der Github-Seite des Projekts anc: https://github.com/tobimensch/anc

Es gibt auch eine README-Datei mit Anwendungsbeispielen.

Vollständige Offenlegung: Ich bin der Autor dieses Skripts. Ich hoffe, einige Leute werden es nützlich finden.

Tobimensch
quelle