Abkürzung zum Wechseln in ein bestimmtes Verzeichnis

12

Im Ubuntu-Terminal verbringe ich viel Zeit damit, bei jedem Start des Computers in ein bestimmtes Verzeichnis zu wechseln. Gibt es eine Möglichkeit, diesen Prozess zu vereinfachen? Gibt es einen Hotkey oder einen schnellen Verzeichniswechsel, den ich verwenden kann (z. B. Kurzwahl auf einem Telefon)?

 eg:
    cd 1:Changes to saved directory one
Entwickler Android
quelle
Vier Jahre, seit diese Frage gestellt wurde und bis heute niemand CDPATH erwähnte. :(
Kojiro
Ich nehme an, dass dies von Ihrer Konsole abhängt, aber im Kubuntu-Terminal gibt es ein Lesezeichen-Menü, in dem ich einfach ein Verzeichnis mit einem Lesezeichen versehen und auf diese Weise dorthin springen kann!
Pixel

Antworten:

12

Es gibt zwei Möglichkeiten:

  1. Wenn Sie sich jedes Mal, wenn Sie ein Bash-Terminal öffnen, in einem bestimmten Verzeichnis befinden möchten, bearbeiten Sie Ihre ~/.bashrcDatei und fügen Sie cd Directorybeispielsweise einfach die Zeile hinzu cd ~/Desktop.

  2. Wenn Sie mehrere Verknüpfungen haben möchten, können Sie immer globale Variablen verwenden, die Sie in Ihrer ~/.bashrcDatei wie folgt festlegen können, export a=/tmpund dann können Sie dies tun, zu cd $adem Sie gelangen /tmp.

Denken .bashrcSie daran, dass Sie nach dem Bearbeiten Ihrer Datei das Terminal neu starten oder ein neues öffnen müssen.

Dan
quelle
3
Um einen Neustart des Terminals zu vermeiden, können Sie source ~/.bashrcoder, kürzer, verwenden . ~/.bashrc.
Gerhard Burger
18

Schauen Sie sich auch an autojump, es erstellt eine Datenbank mit zuvor besuchten Verzeichnissen und dann können Sie dorthin springen. So haben Sie zum Beispiel

/home/user/this/long/and/annoyingly/deep/directory/workstuff

Wenn Sie es dann einmal besucht haben, können Sie zu ihm springen

j workstuff

oder auch

j stuff

weil es auch mit Teilübereinstimmungen funktioniert. Wenn mehr als ein Verzeichnis übereinstimmt, springen Sie zu dem am häufigsten besuchten Verzeichnis. Wenn dies nicht das gewünschte ist, wiederholen Sie den Befehl, um zum zweiten zu wechseln.

Es wird jedoch besser! Wenn Sie auch das Verzeichnis haben

/home/user/stuff

und du machst

j stuff 

und dann TabTabTabbekommen Sie (in der Reihenfolge der meistbesuchten)

$ j stuff__
stuff__1__/home/user/this/long/and/annoyingly/deep/directory/workstuff
stuff__2__/home/user/stuff

und dann können Sie einfach die Nummer des gewünschten Verzeichnisses drücken!

Zur Installation können Sie einfach verwenden sudo apt-get install autojumpund dann müssen Sie hinzufügen

source /usr/share/autojump/autojump.bash

zu deinem ~/.bashrc.

Weitere Informationen finden Sie hier: https://github.com/wting/autojump (auch Anweisungen zur Installation von src, mit der Sie die neueste Version erhalten)

Gerhard Burger
quelle
1
crtl + r in einem Terminal sucht auch in früheren Befehlen nach "Teilübereinstimmungen". Sehr praktisch.
Dan
6

Bash- Aliase sind nützlich, um Verknüpfungen für häufig ausgeführte Befehle zu erstellen.

  • In ~/.bashrceine Zeile ähnlich der folgenden fügen Sie den Alias zu erstellen:

    alias jump1='cd /long/path/name/that/is/frequently/used'
    
  • Schließen und öffnen Sie das Terminal erneut oder führen Sie es aus source ~/.bashrc.

  • Von nun an können Sie nur noch jump1ausführen, um diesen langen cdBefehl auszuführen .

Siehe auch:

Flimm
quelle
4

Obwohl es bereits einige gute Antworten gibt, dachte ich, ich würde der Vollständigkeit halber die alten pushdund popdBash-integrierten Funktionen erwähnen, mit denen Sie sehr schnell zwischen Verzeichnissen in tiefen Pfaden in Ihrem Dateisystem wechseln können. Im Gegensatz zu den autojumpvon burger.ga erwähnten Lesezeichen ist der mit using erstellte Verzeichnisstapel pushdnur vorübergehend.

Da die GNU Handbuch Notizen , pushdund popdsind Bash builtins ein temporäres Verzeichnis Stapel zu konstruieren , die eine ist

Liste der zuletzt besuchten Verzeichnisse. Das eingebaute Pushd fügt dem Stapel Verzeichnisse hinzu, wenn es das aktuelle Verzeichnis ändert, und das eingebaute Popd entfernt angegebene Verzeichnisse aus dem Stapel und ändert das aktuelle Verzeichnis in das entfernte Verzeichnis. Das integrierte Verzeichnis zeigt den Inhalt des Verzeichnisstapels an.

Es ist etwas gewöhnungsbedürftig, aber es gibt viele nützliche Tutorials in diesem Blog und auf dieser Website zum Beispiel. Es gibt keine separaten Manpages für die Befehle, da diese in der Bash-Manpage enthalten sind. Zum schnellen Nachschlagen können Sie jedoch die GNU Bash- Seite anzeigen .

Die klarste Erklärung findet sich in diesem sehr nützlichen Artikel und ist genau die Art pushdund Weise, wie ich sie benutze und popd:

Verwenden Sie zunächst dirsoder, dirs -lum Verzeichnisse auf dem Stapel aufzulisten und den Stapel dirs -czu löschen.

In gewisser Weise setzen Sie ein Lesezeichen für den Ort, an den Sie zurückkehren möchten, indem Sie eingeben

pushd /home/mike/Pictures/Canon/2012_07_01

Anschließend können Sie dem Stapel weitere Verzeichnisse hinzufügen, sodass Sie eine Verzeichnisliste wie folgt erhalten, die 3 festgelegte Ordner und Ihren Basisordner enthält ~:

dirs
~/Downloads/folder/interest ~/Music/artist/album ~ ~/Pictures/Canon/2012_07_01

Sie müssen es nicht popdsofort verwenden, da dadurch Verzeichnisse vom Stapel entfernt werden. Am besten pushddrehen Sie den Stapel, damit Sie zwischen den Verzeichnissen wechseln und sie nach Ihren Wünschen sortieren können. Weitere Informationen zu dieser nützlichen Stapelrotation finden Sie in der Bash-Manpage .

Wenn Sie genau die Stapelanordnung haben, wie die obige dirsAuflistung zeigt, pushd +3wechseln Sie zum jeweiligen Bilderordner und platzieren diesen über dem Stapel (es ist +3 und nicht +4, da Sie Ihre nicht ~im Verzeichnisstapel zählen):

pushd +3
~/Pictures/Canon/2012_07_01 ~/Downloads/folder/interest ~/Music/artist/album ~

Die Eingabeaufforderung lautet also:

~/Pictures/Canon/2012_07_01$

Sie können dies weiterhin tun, ohne sie aus dem Stapel zu entfernen, obwohl alle Ordner, cdin denen Sie sich befinden, außer denen, die dem Verzeichnisstapel hinzugefügt wurden, pushdIhren Verzeichnisstapel ändern.

Sobald Sie den Verzeichnisstapel in der gewünschten Reihenfolge angeordnet haben, können Sie popdschnell durch die Verzeichnisse blättern und dann zum Basisordner zurückkehren. Zum Beispiel können Pictureswir von zurückkehren zu Downloads:

popd
~/Downloads/folder/interest ~/Music/artist/album ~

und die Eingabeaufforderung lautet

~/Downloads/folder/interest$

Das Schöne daran ist im Allgemeinen, dass Sie den Verzeichnisstapel und die Reihenfolge der darin enthaltenen Elemente einrichten pushdund dann, wenn Sie drei Dateien in jedem dieser Verzeichnisse bearbeiten müssen, sofort zu jeder Datei zurückkehren können, popdwährend Sie sie entfernen aus dem Verzeichnisstapel. Dann popdkehren Sie mit Ihrem letzten zurück zu ~. Dies ist besonders nützlich, wenn Sie über besonders tiefe Verzeichnisse verfügen und damit den Verzeichnisstapel einrichten können, um schnell zwischen ihnen zu wechseln.

Darüber hinaus enthält diese Frage einige Tipps, die Sie bei der Arbeit an der Befehlszeile möglicherweise nützlich finden:

Gemeinschaft
quelle
2

Obwohl es eine Befehlszeilenmethode gibt, um dies schneller zu erledigen, würde ich persönlich die Verwendung einer Nautilus-Erweiterung namens empfehlen nautilus-open-terminal.

Installieren Sie zuerst das Paket nautilus-open-terminalund setzen Sie ein Lesezeichen für Ihre Lieblingsordner mit Nautilus. In Nautilus 3.6. * Müssen Sie in das Ausrüstungsmenü gehen und diesen Ort mit einem Lesezeichen versehen auswählen .

Geben Sie hier die Bildbeschreibung ein

Verwenden Sie dann Nautilus-Lesezeichen, um schneller in Ihren Lieblingsverzeichnissen zu wechseln. Klicken Sie einfach mit der rechten Maustaste auf eine leere Stelle und wählen Sie Im Terminal öffnen .

Geben Sie hier die Bildbeschreibung ein

Jetzt können Sie sowohl über die Befehlszeile als auch über den Dateimanager schnell auf Ihre bevorzugten Verzeichnisse zugreifen.

remjg
quelle
Das Originalplakat versucht, vom Terminal aus zu arbeiten, und es ist oft schneller, vom Terminal aus zu arbeiten.
Haziz
1
@haziz: Ja, aber Fragen und Antworten von AskUbuntu sollten nicht nur für das OP nützlich sein, sondern speziell für alle Personen, die dies im Web gefunden haben. Dies ist eine wertvolle Antwort für mich.
Javier Rivera
2

anc wurde genau für diesen Anwendungsfall entwickelt.

https://github.com/tobimensch/anc

Hier ist ein Auszug aus der README.md:

# make the current directory the default anchor:
$ anc s

# go to /etc, then /, then /usr/local and then back to the default anchor:
$ cd /etc; cd ..; cd usr/local; anc

# go back to /usr/local :
$ anc b

# add another anchor:
$ anc a $HOME/test

# view the list of anchors (the default one has the asterisk):
$ anc l
(0) /path/to/first/anchor *
(1) /home/usr/test

# jump to the anchor we just added:
# by using its anchor number
$ anc 1
# or by jumping to the last anchor in the list
$ anc -1

# add multiple anchors:
$ anc a $HOME/projects/first $HOME/projects/second $HOME/documents/first

# use text matching to jump to $HOME/projects/first
$ anc pro fir

# use text matching to jump to $HOME/documents/first
$ anc doc fir

# add anchor and jump to it using an absolute path
$ anc /etc
# is the same as
$ anc a /etc; anc -1

# add anchor and jump to it using a relative path
$ anc ./X11 #note that "./" is required for relative paths
# is the same as
$ anc a X11; anc -1

# using wildcards you can add many anchors at once
$ anc a $HOME/projects/*

# use shell completion to see a list of matching anchors
# and select the one you want to jump to directly
$ anc pro[TAB]

Vollständige Offenlegung: Ich bin der Autor von anc.

Tobi
quelle
1

Sie können einen Alias ​​in Ihre .bashrc-Datei (oder die Konfigurationsdatei für Ihre Lieblings-Shell - sie befinden sich normalerweise in Ihrem Home-Verzeichnis) einfügen:

alias cd1="cd directory/directory/my_destination/"

Ein nützlicher Info-Link zur Verwendung von Aliasen in Bash ist hier .

Haziz
quelle
1

Ich habe dafür eine Reihe von Bash-Funktionen erstellt und sie meinem .bash_profile hinzugefügt

Skript

goto(){
    cd $(getFolders $1)
}

gf(){
    getFolders $1
}

getFolders (){

    local folderList=(
     'alias'
     'Description of alias'
     '/path/to/alias/folder'
     'alias2'
     'Description of alias2'
     '/path/to/alias2/folder'
    )
    local moved="0"
    local count=0

    # Returns the path to the project
    while [ "${folderList[count]}" != "" ]
    do
        if [ "$1" == "${folderList[count]}" ]; then
            echo ${folderList[$(( $count + 2 ))]}
            moved="1"
        fi
        count=$(( $count + 3 ))
    done

    # Returns all project names
    if [ "$moved" != "1" ]; then
        count=0
        while [ "${folderList[count]}" != "" ]
        do
            echoc 6 ${folderList[count]}
            echo - ${folderList[count+1]}
            count=$(( $count + 3 ))
        done
    fi
}

Verwendung

getFolders

Mit getFolders haben Sie eine Liste mit Kurzschrift, Beschreibung und Speicherort für jeden Ordner. Wenn Sie getFolders mit einer Kurzform verwenden, wird der Ordner ausgegeben. Sie können eine Liste der verfügbaren Ordner und ihrer Beschreibungen abrufen, indem Sie einfach getFolders ohne Parameter aufrufen

Beispiel zum Abrufen des Ordnerpfads

getFolders alias

Ausgänge

/path/to/alias/folder

Beispiel für das Abrufen verfügbarer Ordner.

getFolders

Ausgänge

alias
- Description of alias
alias2
- Description of alias2

gf

gf ist eine Verknüpfung für getFolders

gf alias2

Ausgänge

/path/to/alias2/folder

gehe zu

goto ist eine einfache Möglichkeit, in den ausgewählten Ordner zu wechseln.

goto alias

Ausgabe

Die CD wurde im Ordner / path / to / alias / ausgeführt

/ path / to / alias / folder>

Warum mehrere Funktionen haben

Im Mittelpunkt von Unix und Linux stehen einfache wiederverwendbare Funktionen, die miteinander verkettet werden können. Ich bevorzuge diese Methode, da sie Sie nicht nur an einen ausgewählten Ort verschiebt, sondern eine Funktion ist, die per Alias ​​einen Pfad zurückgibt. Sie können diese Funktion verwenden, um von diesem Punkt aus alles wie CD bis zu diesem Pfad zu tun.

Michael Warner
quelle
0

Ziehen Sie in Betracht, die CDPATHUmgebungsvariable in Ihrem .bashrc- oder .bash_profile festzulegen. CDPATH hat dieselbe durch Doppelpunkte getrennte Form PATHwie andere ähnliche Variablen und ermöglicht cdVerknüpfungen beim Auffinden Ihrer Verzeichnisse. Beispielsweise:

$ mkdir -p /tmp/foo/bar/baz
$ CDPATH='/tmp/foo/bar'
$ cd baz
/tmp/foo/bar/baz
Kojiro
quelle
0

Sie können eine eigene Verknüpfung zu einem bestimmten Verzeichnis einrichten. Zum Beispiel möchten Sie in ein verschachteltes Verzeichnis wechseln, im Allgemeinen tun Sie dies

cd / home / dir-1 / dir-2 / dir3 / dir4 / dir5 / dir6 / dir-target

Normalerweise verwenden Sie den Befehl cd und geben dann alle Verzeichnisnamen ein oder überspringen die Eingabe (mit der TAB-Taste), aber es dauert immer noch einige Minuten.

Also, Ihre Zeit zu sparen können Sie einen Aliasnamen machen es im Terminal. Es ist eine einmalige Aufgabe, einen Alias ​​einzurichten.

Alias ​​dir-target = '/ home / dir-1 / dir-2 / dir3 / dir4 / dir5 / dir6 / dir-target'

Jetzt müssen Sie nur noch den Aliasnamen ( dir-target ) verwenden, um in Ihr Zielverzeichnis zu wechseln.

Sanjay Mundhra
quelle
0

Der schnellste Weg, den ich gefunden habe, ist xdein "eXchange Directories" -Programm, das von einem Niederländer namens Frank B. Brokken geschrieben wurde.

Es funktioniert , indem alle Pfade im Dateisystem zu finden , die zu einer Abkürzung auflösen können Sie eingegeben hat , zum Beispiel ulbkönnte stehen , /usr/local/binwenn diese Ordner vorhanden ist Ihr System:

% cx ulb
Multiple Solutions:
 1: /usr/lib/binfmt.d/
 2: /usr/local/bin/

Wenn Sie 2 drücken, sind Sie dabei /usr/local/bin.

Es ist wirklich alte Software und nicht mehr am ursprünglichen Speicherort verfügbar, kein Kontakt mit dem Autor. Um zu verhindern, dass sie verloren geht, habe ich sie in das Github-Repo eingefügt:

https://github.com/mrkafk/exchange_directories

LetMeSOThat4U
quelle
-1

Ich benutze dazu DirB (Directory Bookmarks). Sehr schön! http://www.linuxjournal.com/article/10585

Ich habe meine an meinen Geschmack angepasst und bin einfacher zu bedienen und klarer.

fstephens
quelle
Willkommen bei Ask Ubuntu! Während dies theoretisch die Frage beantworten kann, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Fossfreiheit