Wie man Long Paths in Bash verwaltet?

8

Ich habe ein Problem, lange Pfade zu verwalten. Wie kann ich schnell zu Pfaden wie

kommen %Vor%

Ich habe einen Alias ​​versucht

%Vor%

Ich kann jedoch keine Aliase für zwei separate Wörter erstellen. Ich habe lange Listen von Bash-Aliasen und Pfaden in CDPATH, also zögere ich, sie mehr zu machen. Wie können lange Pfade verwaltet werden?

[Ideen für Antworten]

Die Antwort des Benutzers littb hat einige meiner Probleme im Management aufgedeckt. Dinge wie "STRG + R", "! -3: 1: 2: 4: x" und "inkrementelle Suche" sind schwer für mich. Sie helfen wahrscheinlich beim Navigieren in langen Verzeichnissen und in dem Sinne Management.

    
Masi 25.03.2009, 21:03
quelle

17 Antworten

24

Überlegen Sie, symbolische Links zu verwenden. Ich habe ein Verzeichnis ~/work/ , wo ich symbolische Links zu allen meinen aktuellen Projekten platziere.

Sie können auch Shell-Variablen verwenden:

%Vor%

Dann:

%Vor%     
Juliano 22.03.2009, 03:07
quelle
32

Die Verwendung von symlinks ist wahrscheinlich die beste Idee; aber Sie können es noch einfacher tun als sie alle in Ihr Home-Verzeichnis zu werfen.

Wie Sie bereits erwähnt haben, hat BASH eine Funktion namens CDPATH , die hier sehr nützlich ist.

Mach einfach einen versteckten Ordner in deinem Homedir (damit es dein Homedir nicht zu sehr durcheinander bringt):

%Vor%

Dies erstellt ein Verzeichnis in Ihrem Homedir mit dem Namen ".paths", das symbolische Links zu all Ihren Verzeichnissen enthält, die Sie regelmäßig verwenden, und setzt dann die CDPATH-bash-Variable auf dieses Verzeichnis (in Ihrer .bashrc) und liest die Datei erneut ein. bashrc-Datei.

Sie können jetzt von überall zu einem dieser Pfade gehen: :

%Vor%

Sie erhalten einen kurzen CDPATH, keine überladenen Aliasnamen und, was noch wichtiger ist: Eine wirklich einfache Möglichkeit, zu diesen langen Pfaden von anderen Anwendungen wie UI-Anwendungen zu navigieren, indem Sie einfach ~ / .paths oder fügen Sie dieses Verzeichnis in die Seitenleiste Ihrer UI-Anwendung ein.

Wahrscheinlich die einfachste Allround-Lösung, die Sie haben können.

    
lhunath 24.03.2009 10:06
quelle
6

Erstellen Sie Symlinks in Ihrem Home-Verzeichnis (oder an einem anderen Ort Ihrer Wahl)

ln -s longDirectoryPath ~ / MySymLinkName

Siehe man ln für weitere Details.

    
Dan Breslau 22.03.2009 03:05
quelle
5

Wahrscheinlich die einfachste Lösung ist zu verwenden:

%Vor%

Wenn Sie nur an einem Projekt arbeiten. Wenn Sie an mehreren Projekten arbeiten, könnten Sie einen anderen Alias ​​haben, der die Verzeichnisse innerhalb dieser Aliase geändert hat.

Sie würden also etwas wie:

verwenden %Vor%

Da dies eine nützliche Sache ist, habe ich beschlossen, eine Reihe von Skripten zusammenzustellen, die verwendet werden können. Sie basieren allesamt auf einer Konfigurationsdatei, die Sie in Ihrem Home-Verzeichnis ablegen, sowie auf Aliasen für Quelltext-Skripte. Die Datei "~/.cdx_data" hat die Form:

%Vor%

und listet alle relevanten Projekte auf (Scrabble und Sodoku in diesem Fall) und ihre Verzeichnisse (die für jedes Projekt unterschiedlich sein können, aber in diesem Beispiel top, bin, src und Daten haben).

Die erste Aktion besteht darin, das Zeug zu initialisieren, also:

%Vor%

am Ende Ihres .bash_profile und erstellen Sie die "~/.cdx_init" -Datei als:

%Vor%

Dies richtet die vier Aliase ein, um die Dateien zu erhalten, die ich unten hinzufügen werde. Verwendung ist:

%Vor%

Das eigentliche Skript folgt. Erstens, ".cdx_list" , das nur die erlaubten Verzeichnisse im aktuellen Projekt auflistet (Pipelines sind zur besseren Lesbarkeit in mehrere Zeilen aufgeteilt, sollten aber alle in einer Zeile stehen).

%Vor%

Ähnlich zeigt ".cdx_projlist" alle möglichen Projekte an:

%Vor%

In den fleischlichen Skripten setzt ".cdx_proj" das aktuelle Projekt und / oder zeigt es an:

%Vor%

und ".cdx_goto" sind für Verzeichnisse innerhalb des Projekts identisch:

%Vor%

Es verwendet drei Umgebungsvariablen, die für die eigene Verwendung reserviert sind: "CDX_PROJ" , "CDX_DIR" und "CDX_TMP" . Abgesehen von diesen und den oben genannten Dateien und Aliasen werden keine anderen Ressourcen verwendet. Es ist die einfachste und gleichzeitig anpassungsfähigste Lösung, die ich mir vorstellen kann. Viel Glück.

    
paxdiablo 22.03.2009 03:54
quelle
4

Wiederbesuchen. Heute habe ich diesen Link von einer Social-Bookmarking-Site erhalten, dann habe ich mich sofort an diese Frage erinnert:

Navigation mit bm

  

Wir behalten ein einfaches, einfaches Text-Lesezeichen   Datei und verwenden Sie ein Tool namens BM zu tun   die Nachschlagewerke. Das Werkzeug kann auch sein   verwendet, um den Lesezeichenindex zu bearbeiten   dynamisch wie unten gezeigt wo wir   Fügen Sie die Verzeichnisse aus dem vorherigen hinzu   Beispiel für den Index.

    
Juliano 02.10.2009 16:41
quelle
3

Sobald ich in so ein langes Verzeichnis cd'd, habe ich das in der Geschichte. Dann gebe ich einfach Ctrl-R für die Eingabeaufforderung "(reverse-i-search)" ein und gebe ein paar Zeichen ein, wie Dev/C , die irgendwo im Pfad erscheinen, und es zeigt mir den Befehl, was ich damals ausgegeben habe und ich kann leicht wieder dazu springen.

Das funktioniert in der Praxis ziemlich gut. Weil es keinen Eintrag finden wird, wenn Sie diesen Pfad für eine gewisse Zeit nicht eingegeben haben, was bedeuten würde, Arbeit zu erledigen, um die Dinge einfacher zu machen, wäre wahrscheinlich nicht die Zeit wert. Aber es wird definitiv finden, wenn Sie es vor kurzem verwendet haben. Was genau ich brauche.

In gewisser Weise ist es ein selbstorganisierender Cache für lange Befehle & amp; Pfadnamen:)

    
Johannes Schaub - litb 22.03.2009 04:31
quelle
3

Vielleicht möchten Sie ein Skript wie dies in Ihrer .bashrc. Ich habe es täglich benutzt, seit ich diesen Beitrag gelesen habe. Ziemlich blutig nützlich.

    
wzzrd 24.03.2009 09:32
quelle
3

Der Benutzer jhs schlug Pushd und Popd-Befehle vor. Ich teile hier einige meiner Bash-Skripte, die ich in Unix Power Tools -book gefunden habe. Sie sind sehr cool, wenn Ihre Verzeichnisse viel zu lang werden:)

%Vor%

Der Befehl 'pushd + n' "rotiert" den Stapel. Der umgekehrte Befehl 'popd + n' löscht den n-Eintrag des Stapels. Wenn Ihr Stack zu lang wird, verwenden Sie 'repeat n popd'. Zum Beispiel ist Ihr Stack 12 Verzeichnisse lang:

%Vor%

Wenn Sie Ihren Stack sehen wollen, schreiben Sie "Pushd". Für weitere Lektüre empfehle ich das Buch auf den Seiten 625-626.

    
Masi 25.03.2009 20:02
quelle
2

Es gibt grundlegende bekannte Ideen, wie das Erstellen von Aliasen:

%Vor%

und auch "Kieselsteine ​​fallen lassen"

%Vor%

und auch das oben genannte "projektbasiert" machen. Ich verwende 'ticketbasierte' Verzeichnisse.

%Vor%

Aber darüber hinaus ist es manchmal einfach, mit Hilfe von Befehlszeilenmenüs vor und zurück zu springen, wo Sie gerade waren. (Pushd und Popd sind umständlich, IMHO).

Ich benutze acd_func.sh (unten aufgeführt). Einmal definiert, können Sie

tun

CD -

, um eine Liste der letzten Verzeichnisse mit einem numerischen Menü anzuzeigen

cd -2

, um zum zweitletzten Verzeichnis zu gelangen.

Sehr einfach zu bedienen, sehr praktisch.

Hier ist der Code:

%Vor%     
Leonard 26.03.2009 20:33
quelle
2

Dies könnte auch eine nützliche Funktion sein, um Ihre .bashrc ; Es verschiebt sich entweder in eine Reihe von Verzeichnissen oder in ein benanntes Verzeichnis, d. h. wenn Sie in /a/b/c/d/ sind, können Sie up 3 oder up a verwenden, um in a zu enden.

Ich habe keine Ahnung, wo ich das gefunden habe; Wenn Sie wissen, bitte kommentieren oder fügen Sie die Attribution hinzu.

%Vor%     
Erik Hesselink 28.03.2009 18:44
quelle
2

Wenn Sie zu zsh wechseln möchten, ist dies sehr einfach - verwenden Sie einfach "alias -g" (globaler Alias, d. h. ein Alias, der an beliebiger Stelle im Befehl funktioniert, nicht nur am ersten Wort).

%Vor%

In bash denke ich, dass es am nächsten kommt, wenn du zum Aliasing-Stil kommst, eine Funktion zu schreiben:

%Vor%

Dies bedeutet, dass Sie etwas anderes als "cd" als Befehl verwenden, wenn Sie eine Verknüpfung wünschen, aber ansonsten ist es flexibel; Sie können der Funktion auch ein "ls" hinzufügen, so dass Sie immer daran erinnert werden, was sich nach dem cd usw. im Verzeichnis befindet.

(Beachten Sie, dass Sie ein Multiword-Argument wie oben angegeben verwenden müssen, indem Sie es wie folgt in der Befehlszeile angeben:

%Vor%

Es ist also nicht wirklich praktisch. Aber es wird funktionieren, wenn Sie müssen.)

    
fholo 30.03.2009 15:15
quelle
2

Gestützt auf Andrew Medicos Vorschlag, schaut euch J

an     
Dario 01.04.2009 20:48
quelle
2

In Ihrer .bashrc Suche

%Vor% und ersetze das \ w durch \ W . Ich habe es bereits hier geändert. Dadurch erhalten Sie nur das Hauptverzeichnis, in dem Sie arbeiten. Sie können das vollständige Verzeichnis abrufen, indem Sie pwd eingeben.     
Prabesh Subedi 29.03.2018 14:04
quelle
1

Sehen Sie in pushd nach, was Ihnen erlaubt, einen Stapel von Verzeichnissen zu pflegen, auf die Sie drücken, abspringen oder neu anordnen können.

    
JasonSmith 22.03.2009 03:41
quelle
1

Sehen Sie sich autojmp oder dirmarks

    
Andrew Medico 25.03.2009 04:28
quelle
1

Verwaltung erfordert sowohl schnelles Erstellen als auch Entfernen von Verzeichnissen. Erstellen Sie viele Direktiven:

%Vor%

Entfernen Sie rekursiv viele Verzeichnisse (seien Sie sehr vorsichtig, wenn Sie in niedrigeren Verzeichnissen sind!):

%Vor%

Für weitere Lektüre kann der Spickzettel Ihnen helfen:

  

Ссылка

Es enthält einige Nuggets, aber ich finde es ziemlich schwer zu lesen. Ich kann keine Befehle wie Meta + & gt; Sie helfen Ihnen wahrscheinlich beim Navigieren in langen Verzeichnissen.

    
quelle
1

Mir ist klar, dass die Frage ziemlich alt ist, aber keines der Skripts da draußen hat mich überzeugt, also habe ich ein neues geschrieben.

Hier sind die Anforderungen, die ich mir vorgestellt habe:

1) Verwenden Sie nur Bash-Befehle - ich beabsichtige, dies auf vielen verschiedenen Units zu verwenden - Linux, Cygwin, HP-UX, AIX und ein paar anderen, so dass ich mich nicht darauf verlassen konnte, dass Grep konsistent ist. Zum Glück habe ich Bash überall, wo ich arbeite.

2) Kurzer Code - Ich wollte dies mit einem Schlüssel im GNU-Bildschirm verbinden können, und einfach diesen Schlüssel drücken, um das Skript in die aktuelle Bash-Shell einzufügen, die ich gerade benutze Bash-Profile auf jedem System, das ich verwende, einzurichten. Alles super lange wäre lästig und würde zu viel Zeit zum Einfügen brauchen.

3) Keine Dateiverwendung - Sie möchten keine gemeinsamen Anmeldungen mit zufälligen Dateien auffüllen.

4) Im Normalfall wie "cd" handeln. Ich möchte nicht darüber nachdenken müssen, welchen Befehl ich verwenden soll, bevor ich mit der Eingabe beginne.

5) Geben Sie "up" wie diese Antwort: Wie man Long Paths in Bash verwaltet?

6) Führen Sie eine Liste der zuletzt verwendeten Verzeichnisse und wechseln Sie zu den neuesten.

Hier ist das Skript:

%Vor%

Verwendung:

%Vor%

Wenn es ohne Parameter aufgerufen wird, gibt es die aktuelle Verlaufsliste aus. Wenn es einen Parameter hat, durchsucht es den Verlauf nach dem zuletzt verwendeten Verzeichnis, das die Zeichenfolge $ 1 und cd's enthält.

%Vor%

Ist cd parameters . Wenn dies fehlschlägt, überprüft es, ob eines der übergeordneten Verzeichnisse von $ PWD mit $ 1 übereinstimmt, und cd dazu. Wenn das fehlschlägt, ruft es jh auf. Wenn dies fehlschlägt, gibt es das Ergebnis von cd parameters

aus

Hinweis: Ich habe '==' als internes Trennzeichen verwendet. Hoffentlich haben Sie keine Verzeichnisse, die ein '==' enthalten, aber wenn Sie das tun, müssen Sie das Skript ändern. Nur:% s / == / was auch immer / g

    
Xepo 23.05.2017 12:00
quelle

Tags und Links