Wir wissen, dass mit cd <directory>
das Verzeichnis geöffnet wird, falls es existiert!
Außerdem cd ..
werden wir eine Ebene aus dem aktuellen Arbeitsverzeichnis aufsteigen.
Aber wenn wir ein verschachteltes Verzeichnis mit einem längeren Pfad haben /home/thina/teams/td/tech/app/release/apks
, ist es anstrengend, einfach in den Ordner zu gehen, apks
und es ist auch schwierig, zu einem anderen Knoten zurückzukehren, sagen wir hier /home/thina/teams
.
Gibt es eine Möglichkeit, die Eingabe von cd
und zu überspringen cd ..
? Ich benutze Ubuntu 16.04.
command-line
bash
directory
Gsthina
quelle
quelle
cd
und zu überspringencd ..
?cd ../../../../..
CDPATH
Variable in denbash
Dokumenten ansehen .Antworten:
Es gibt
pushd
undpopd
:Versuchen Sie
help pushd
undhelp popd
für mehr Wahlen. Es gibt keineman
Seite, weilpushd
undpopd
Bash-Befehle eingebaut sind.quelle
cd -
du nicht das Gleiche tun?pushd
undpopd
kann sich mehr als einen vorherigen Pfad merken.dirs
Ihren Verzeichnisstapel in den Befehlenpushd
/popd
aufzulisten.help pushd
und, diehelp popd
Sie erwähnt haben (und auchhelp dirs
), aber ich dachte, ich würde erwähnen, falls sich die Leute fragen, woher diese Befehle kommen.help pusdh
Zusätzlich zu den sehr guten Antworten, die Sie bereits erhalten haben, finden Sie hier einige Tipps zur
cd
effektiven Verwendung .cd -
bringt Sie zurück zum letzten Verzeichnis, in dem Sie sich befanden.cd ../../..
Wenn Sie 3 Ebenen auf einmal..
aufsteigen möchten , können Sie die Notation verwenden, um so viele Verzeichnisse nach oben zu verschieben, wie Sie möchten.cd ..
springen möchten , verwenden Sie bash history, indem Sie die Pfeiltaste nach oben drücken, um den Befehl erneut zu verwenden.~
stehen in der aktuellen Benutzer Home - Verzeichnis, wenn Sie sich als Benutzer thina angemeldet sind,cd ~/teams
werden Sie nehmen zu/home/thina/teams
cd
Wenn Sie die automatische Bash-Vervollständigung für Pfade verwenden, vervollständigt die Tabulatortaste einen Abschnitt eines Pfads im Befehl. Wenn Sie einen Teil eines Pfadsegments gefolgt von Tabdiesem eingeben, wird dieses Segment vervollständigt, wenn keine andere gültige Auswahl vorhanden ist. Wenn Sie zum Beispiel tippten undcd /home/thina/teams/td/t
dann drückten Tab, wurde das Wort tech für Sie ausgefüllt, solange sich keine anderen Dateien oder Verzeichnisse im Verzeichnis td befanden, die mit dem Buchstaben t begannen.Wenn Sie diese Tipps zusammen verwenden, können Sie das Durchsuchen von Verzeichnissen
cd
weitaus schmerzfreier gestalten.quelle
~
, insbesondere wenn Sie als Root angemeldet sind,~user
gelangen Sie schnell inuser
das Basisverzeichnis von.Um mehrere Ebenen gleichzeitig in den Baum zu springen, können Sie die folgende Funktion verwenden (Dank an muru für die erweiterte Version):
Dann können Sie tun:
Zusätzlich:
up
ohne Argument ist gleichbedeutendcd ..
mit${1:-1}
dem$1
Setzen von Ersatzzeichen und1
anderencd ..
zielt darauf ab, das üblichecd -
Verhalten beizubehalten .quelle
-gt
statt>
.>
ist lexikografisch und wird als Zeichenfolge verglichen. Auch stattdessen einen Weg zu bauen, warum nichtcd ..
in einer Schleife:for i in $(seq "${1:-1}"); cd ..; done
? Das kann denif
Zustand auch beseitigen .gt
Bemerkung einverstanden , aber in Bezug auf Ihren zweiten Vorschlag finden Sie die letzte Kugel in der Antwort. Für mich ergibt das Sinn.OLDPWD
den ursprünglichen Pfad ein. Hier ist eine vollständige Version: paste.ubuntu.com/17990874Verwenden Sie für lange Verzeichnisnamen Variablen mit vollständigem Pfad. Beispielsweise,
Dann kannst du einfach machen
cd "$APKS"
Ich habe diese Funktion in meinem Verzeichnis definiert, um die Anzahl der Verzeichnisse zu erhöhen
.bashrc
Um
/home/thina/teams
vonapks
Ihnen zurückzukehren, würde tunHier ist ein Anwendungsbeispiel:
Eine andere kleine Funktion, die ich mir ausgedacht, aber nie so oft benutzt habe, ist die
bookmark
Funktion.So funktioniert es: Ihr aktueller Ordner wird in einer Datei gespeichert, und Sie können dann auf der Grundlage der Zeilennummer in dieser Datei in ein bestimmtes Verzeichnis wechseln. Beispiel:
Und hier ist die Funktion selbst:
quelle
UPDATE: Es gibt ein noch mächtigeres Tool als
autojump
:,fasd
aber ich kenne es nicht.Ich bin überrascht, dass noch niemand
autojump
was erwähnt hatEs ist im Grunde das, was @graipher gebaut hat, mit ein paar zusätzlichen Optionen.
Wie ich erwähnt auf eine andere Frage:
Nachdem Sie ein paar Mal in ein Verzeichnis cd:
cd /home/thina/teams/td/tech/app/release/apks
Sie können die Verknüpfung verwenden
j
, um schnell dorthin zu gelangen, unabhängig davon, in welchem Verzeichnis Sie sich gerade befinden:j apks
Beachten Sie, dass die Verwendung eines beliebigen Teils des Pfads funktioniert, sofern es sich um den höchsten auf der Liste handelt:
j app
führt Sie auch zu,.../apks
wenn Sie mehrmals dorthin gegangen sind als zu.../app
.Ich würde es empfehlen, anstatt ein eigenes Skript zu haben, da es gut gepflegt ist, für Ubuntu vertrieben wird und andere nette Funktionen hat, wie zum Beispiel jump to child :
Hat sich bewegt Sie
apks
intd
, anstatt einige andereapks
unter einem anderen Baum.quelle
Aliase
Ich habe eine Liste häufig verwendeter Verzeichnisse, die direkt über Alias verfügbar sind. Dies umfasst auch Verknüpfungen für die Verzeichnisse in der Hierarchie.
Wenn ich jetzt drei Stufen aufsteigen möchte, tippe ich einfach
....<Enter>
und schon bin ich da!quelle
Mach das ... an
autocd
Option (shopt -s autocd
), damit Sie nicht tippen müssencd
. Beispielsweise benötigen Sie nur den zweistelligen Befehl..
, um zum übergeordneten Verzeichnis zu wechseln.Wenn Sie zwischen zwei Verzeichnissen navigieren, können Sie mit zwischen ihnen wechseln
cd -
, wodurch zum vorherigen Arbeitsverzeichnis gewechselt wird. Dieautocd
Option wird nicht-
ausgeführt,cd -
aber Sie können einen Alias oder eine Funktion dafür definieren.Mit den eingebauten
pushd
und können Sie sich Verzeichnisse auf einem Stapel merkenpopd
. Das eingebautedirs
listet den Verzeichnisstack auf (ich findedirs -v
lesbarer).Wenn Sie häufig zu Unterverzeichnissen eines bestimmten Verzeichnisses wechseln und diese Unterverzeichnisse einen ziemlich eindeutigen Namen haben, fügen Sie sie der
CDPATH
Variablen hinzu. Seien Sie jedoch gewarnt, dass ich nie eine Situation gefunden habe, in derCDPATH
es wirklich praktisch war.Sie können eine Variable auf einen Verzeichnisnamen setzen und dann mit zu diesem wechseln
$foo
.Zsh hat ein paar nette Features, die Bash nicht hat. Einige von ihnen können durch Schreiben von Funktionen emuliert werden, die den gleichen Job ausführen. Insbesondere mit der Zwei-Argument-Form von
cd
können Sie bequem in ein anderes Verzeichnis mit einem ähnlichen Namen wechseln, z. B. von/home/thina/teams/td/tech/app/release/apks/com.acme/v1
, läuftcd release beta
zu/home/thina/teams/td/tech/app/beta/apks/com.acme/v1
.quelle
Wie ich bereits auf eine verwandte Frage zu UnixSE geantwortet habe, verwende ich dafür ein Skript namens z [github] .
Es merkt sich Verzeichnisse, in die Sie eine CD geschrieben haben, ordnet sie nach Häufigkeit (Häufigkeit + Aktualität) und ermöglicht es Ihnen, zu einem der gespeicherten Pfade zu wechseln, indem Sie einen Teil seines Namens verwenden.
Nachdem Sie mindestens einmal in ein Verzeichnis gebrannt haben, können Sie z. B .:
Mach einfach:
Dies funktioniert unter Verwendung des partiellen Namensvergleichs (vorausgesetzt, Sie haben kein anderes Verzeichnis im Pfad, das den Begriff sub enthält und dessen Häufigkeit höher ist).
Ich habe auch eine Funktion wie diese definiert, die zuerst eine normale CD ausprobiert und wenn dies fehlschlägt, z verwendet:
Dies gibt Ihnen das Beste von beidem. Befindet sich der Ordner im aktuellen Verzeichnis oder wird ein gültiger vollständiger Pfad angegeben, wird er nur dort cd, andernfalls wird versucht, eine Übereinstimmung in der Datenbank und dort cd zu finden. Dies erspart den (kleinen) Aufwand, manchmal mit cd arbeiten zu müssen (um die Datenbank zu trainieren, in einen Ordner zu wechseln, in dem Sie noch nie zuvor waren) und manchmal daran zu denken, gegebenenfalls z zu verwenden.
quelle
cd
nicht dazuz
beiträgt, die Datenbank mit häufig besuchten Verzeichnissen aufzubauen?autojump
?Drei weitere Optionen, die ich für gut befunden habe (obwohl ich in Zukunft möglicherweise
pushd
mehr verwenden werde, habe ich gerade erst davon erfahren):Ordnen Sie Ihre Pfade so an, dass Sie nicht
cd
in tief verschachtelte Verzeichnisse wechseln müssen , oder vielmehr: Die Orte, die Sie häufig besuchen müssen, sind immer griffbereit. Dies erreichen Sie mit Symlinks : Behalten Sie die expliziten, gut hierarchisierten Verzeichnisse bei, aber erstellen Sie einen Schnellzugriffslink, damit Sie es sich bequem machen können.Anstatt den langen Pfad zu tippen,
cd
verwenden Sie danncd ~/apks
undcd ../teams
(oder in diesem bevorzugten Beispiel~/teams
), um zurückzukehren.Verwenden Sie keine einzelne Shell und keine CD zwischen den Pfaden, sondern lassen Sie eine Shell für jeden der Pfade laufen, in denen Sie arbeiten müssen. Für dieses Multitasking gibt es mehrere Ebenen:
tmux
.Starten Sie einfach eine Aktion mit einem einzigen Befehl, der
cd
sich im Ordner befindet, dort eine Aktion ausführt und sofort die Kontrolle über den ursprünglichen Ordner zurückgibt: stattMach einfach den Einzeiler
oder äquivalent
Nicht
cd
überhaupt , sondern einfach den Befehl direkt von Ihrem Home - Verzeichnis. Klammererweiterungen können hier sehr hilfreich sein: Stattdu kannst tun
quelle
pushd
ist sehr sehr nützlich. Möglicherweise möchten Sie weitere Informationen hinzufügen, um Ihre Antwort zu verbessern.Pushd und Popd
Die Befehle
pushd
undpopd
sind meine Favoriten. Derpushd
Befehl speichert die Verzeichnisse, die Sie besucht habendirs
, und kann mit dem Befehl angezeigt werden. Wenn Sie bereit sind, rückwärts zu springenpopd
, kehren Sie mit zurück.Hier ist ein Beispiel für die Verwendung von Bash-Funktionen und -Aliasen:
Ich benutze ständig eine Mischung dieser Befehle auf verschiedene Arten.
Aliase
Eine weitere Option für Verzeichnisse, auf die häufig zugegriffen wird, besteht darin, die Befehle
cd
oder einfach zupushd
aliasen. Verwenden Sie also die Beispiele aus Ihrem Beitrag:Kombination
Kombinieren Sie die beiden Ideen und Sie können sogar Folgendes haben:
Das gibt Ihnen dann viel Flexibilität beim Durchlaufen von Verzeichnissen. Ich halte die
cd***
undsd***
Aliase auf der Hand für Dinge wieDesktop
,Documents
,Music
,Downloads
, usw. und es ist sehr praktisch!quelle
Try z.lua - Ein neuer CD-Befehl, mit dem Sie schneller navigieren können, indem Sie Ihre Gewohnheiten kennenlernen.
CD in ein Verzeichnis enthält foo:
CD in ein Verzeichnis endet mit foo:
benutze mehrere Argumente:
Angenommen, die folgende Datenbank:
"z in"
würde/home/user/mail/inbox
als höher gewichteter eintrag cd rein. Sie können jedoch mehrere Argumente an z.lua übergeben, um einen anderen Eintrag zu bevorzugen. Im obigen Beispiel"z w in"
würde dann das Verzeichnis zu wechseln/home/user/work/inbox
.CD mit interaktiver Auswahl:
Wenn mehrere Übereinstimmungen gefunden wurden,
z -i
wird mit eine Liste angezeigt:Dann können Sie die Nummer eingeben und auswählen, wohin Sie vor der eigentlichen CD gehen möchten. z.B. 3 eingeben, um zu cd
/home/data/software
. Und wenn Sie einfach die EINGABETASTE drücken und nichts eingeben, wird es einfach beendet und bleibt, wo Sie waren.z.lua
unterstützt auch diefzf
interaktive Auswahl oder Argumentvervollständigung:abschluss mit fzf
schnell zurück zum übergeordneten Element, ohne Folgendes einzugeben
cd ../../..
:Die neue Option
"-b"
kann schnell zu einem bestimmten übergeordneten Verzeichnis in Bash zurückkehren, anstatt "cd ../../ .." redundant einzugeben:(Kein Argument) :
cd
Im Projektstammverzeichnis befindet sich das nächstgelegene übergeordnete Verzeichnis mit.git
/.hg
/.svn
.(Ein Argument) :
cd
Gehen Sie in das nächste übergeordnete Element, das mit dem Schlüsselwort beginnt, und wechseln Sie zum übergeordneten Element, das das Schlüsselwort enthält, wenn Sie es nicht finden.(Zwei Argumente) : Ersetzen Sie den ersten Wert durch den zweiten (im aktuellen Pfad).
...
Beginnen wir mit einem Aliasing
z -b
aufzb
:Ich wünschte, es könnte Ihren Bedürfnissen entsprechen.
quelle
Fisch hat mehrere schöne Einrichtungen für die schnelle Fortbewegung.
Außerdem habe ich meine Lieblingsverzeichnisse mit ~ / f verknüpft, sodass ich mit ~ / f / x zu ~ / foo / bar / baz / experimental-data gelangen kann.
quelle
Ich habe lange Aliase für häufig aufgerufene Verzeichnisse verwendet.
Ich habe auch eine Bash-Funktion namens ccb (Abkürzung für Create CD Bat File - Diese stammt aus DOS / Windows, wo das .bat-Shell-Skript ccb.bat eine weitere .bat-Datei zum Wechseln in das aktuelle Verzeichnis erstellt), die Aliase erstellt / anfügt (in der .bash_aliases-Datei) in das aktuelle Verzeichnis.
Beispiel: $ ccb myfav erstellt einen Alias für das aktuelle Verzeichnis mit einem Alias myfav in der Datei .bash_aliases und erstellt einen Quellcode für die .bashrc-Datei, sodass der Alias sofort verfügbar ist.
Ich habe gerade eine neue Lösung gefunden. Es ist eine Bash-Funktion
Dies muss nichts aus der vorherigen Verwendung lernen. Das Problem, das dies möglicherweise nicht löst, ist: Wenn der Unterverzeichnisbaum mehr als 1 Verzeichnisse mit dem Namen "deeply_nested_dir_name" enthält, wird zum ersten Verzeichnis gesprungen, das von find gefunden wurde.
Außerdem kann diese Lösung keinen anderen Verzeichnisbaum aufrufen.
zwischen fest codierten aliasen und generierten aliasen und dieser neuen lj () - funktion werden die meisten meiner bedürfnisse berücksichtigt.
Hier ist meine ccb () - Bash-Funktion für alle, die sie verwenden möchten
quelle