Wie kann man das Tippen minimieren, wenn Verzeichnisse häufig gewechselt werden?

1689
dehmann

Was sind einige gute Linux-Befehle, um das Wechseln zwischen verschiedenen Verzeichnissen auf der Befehlszeile zu vereinfachen?

Ich muss oft zwischen verschiedenen Verzeichnissen mit langen Namen wechseln, z

cd foo/20100801-rev124-test2 ls  cd ../20100801-rev124-test1 ls  cd ../20100802-rev126-bar 

Normalerweise verwende ich die Tabulatorvervollständigung, also ungefähr so:

cd ../2010080<TAB>2<TAB>-rev12<TAB>6-<TAB>bar 

Aber es ist ärgerlich, weil alle diese Namen so ähnlich sind, sodass die Tab-Vervollständigung nicht wirklich viel Arbeit spart.

Welche Tricks verwenden Sie, um das Tippen in solchen Situationen zu minimieren?

Übrigens, ich benutze pushdund popdmanchmal, aber hier hilft es nicht viel, weil ich die Verzeichnisse nicht in einer bestimmten Reihenfolge besuche.

AKTUALISIEREN:

Eine gute Lösung finden Sie in der akzeptierten Antwort auf meine andere verwandte Frage . Erstellen Sie einfach einen alternativen cdBefehl:

function cd2 { select a in $1*; do cd $a; break; done } 

Es werden alle möglichen Vervollständigungen gleichzeitig aufgeführt:

$ cd2 2010080 (1) 20100801-rev124-test2 (2) 20100801-rev124-test1 (3) 20100802-rev126-bar 

und Sie können eine auswählen, indem Sie deren Nummer eingeben.

5
Hmm, es sei denn, die Lösung erfordert ein bash-Skript oder ähnliches. dehmann vor 13 Jahren 0
Verwenden Sie einen guten Dateimanager mit Lesezeichen und Terminalintegration. Geben Sie auch den Alias ​​".." ein, um zum übergeordneten Verzeichnis zu gelangen, damit Sie nicht "cd .." eingeben müssen. Erstellen Sie Symlinks, um die Eingabe zu speichern. neoneye vor 13 Jahren 0
@neoneye: Ein Dateimanager mit Lesezeichen und Terminalintegration wäre schön. Ich kann keine finden; hast du einen link dehmann vor 13 Jahren 0
Ich benutze mac .. jedoch einige Dateimanager, die für Linux verfügbar sind und die dies am wahrscheinlichsten tun können: Dolphin, Worker. Für den Textmodus gibt es den Midnight Commander. neoneye vor 13 Jahren 1
`alias rotd = 'pushd -0'` verwendet dann Rotd, um den Verzeichnisstapel zu drehen. ctrl-alt-delor vor 7 Jahren 0

10 Antworten auf die Frage

3
garyjohn

Der dirs -vBefehl listet den Verzeichnisstapel mit Nummern vor jedem Verzeichnis auf. Sie können dem pushdBefehl ein Argument mit der Nummer zuweisen, damit er in dieses Verzeichnis springen kann. Wenn Sie beispielsweise anzeigen dirs -v, dass das Verzeichnis, in das Sie wechseln möchten, 2davor steht (dh das dritte Verzeichnis in der Liste ist), wird die Ausführung pushd +2in dieses Verzeichnis geändert.

Um die Eingabe zu speichern, können Sie diese Befehle verkürzen, indem Sie ihnen Aliase wie folgt geben:

alias dv="dirs -v" alias pd=pushd 
2
laurent

Sie können Platzhalter verwenden:

cd ../*test1 or even cd *t1 cd ../2010*test2 cd ../*bar 

Sie sind viel flexibler und Sie müssen nicht für jede Situation ein Skript planen. Wenn Sie sich erst einmal daran gewöhnt haben, werden Sie sie für alle Arten von Verzeichnissen verwenden. Beispiele:

cd /e*/n*k will take you to /etc/network cd /h* to /home 

Sie sind überall einsetzbar ( lsnatürlich auch so, dass Sie filtern können, was zu sehen ist)

Bash Wildcards

Dies kann abhängig von der Anzahl der Dateimuster, denen der Glob entspricht, hilfreich sein oder nicht. Wenn Sie `/ hard_disk` haben, ist` cd / h * `weniger nützlich. Rich Homolka vor 13 Jahren 0
Wenn Sie diese Befehle jedoch häufig verwenden, finden Sie schnell heraus, was der Treffer ist, und es ist fast immer kürzer als die vollständige Eingabe. Sie können auch die anderen Platzhalterzeichen im Link verwenden. In Ihrem Beispiel wäre "cd / ho *" und ja ... ich stimme zu, dass dies nicht der beste ist! :) Dies ist jedoch eher eine Ausnahme und nicht der Fall des OP, da seine Verzeichnisnamen lang sind laurent vor 13 Jahren 0
1
Frank R.
  1. Verwenden Sie den Befehl hist, um den Verlauf aller von Ihnen ausgeführten Befehle anzuzeigen.
  2. Erstellen Sie ein Shell-Skript mit den cd-Befehlen für jedes Verzeichnis, in das Sie häufig wechseln.
1
dmckee
  • Tab Fertigstellung
  • Verlaufszugriff (insbesondere in den Shells, die Zugriff auf die Pfeiltasten bieten)
  • Erwägen Sie in bash die Verwendung von popdundpushd
Vielen Dank! Welche Muscheln bieten Zugriff auf die Pfeiltasten? dehmann vor 13 Jahren 0
Bash, tcsh. Vielleicht zsh. Vermutlich etwas anderes. Beginnen Sie damit, es einfach auszuprobieren. Wenn das nicht funktioniert, überprüfen Sie die Dokumentation. Suchen Sie nach "history" und möglicherweise nach "readline". dmckee vor 13 Jahren 1
Oh, du meinst den Zugriff auf vorherige Befehle mit der Pfeiltaste. Okay, ich benutze das in bash. Ich dachte, Sie meinten, Sie hätten mit den Pfeiltasten auf einen der Kandidaten für die Tab-Vervollständigung zugegriffen. dehmann vor 13 Jahren 0
Neue Bases unterstützen auch andere Readline-Funktionen wie "Cr" für die inkrementelle Verlaufssuche. Da jede Hülle anders ist, ist die Dokumentation Ihr Freund. dmckee vor 13 Jahren 1
Ich benutze bash schon seit Jahren und habe erst in den letzten Monaten `Cr` entdeckt. Es ist eine wundervolle Sache. Doug Harris vor 13 Jahren 1
1
Rich Homolka

In einer Frage wie dieser würde ich sagen, welche Shell Sie verwenden. Jede Schale hat etwas andere Werkzeuge. Meine Antworten hier beziehen sich auf Bash, was Sie wahrscheinlich verwenden.

Für 'Frank Computer' können Sie kein Shell-Skript verwenden, es erstellt einen eigenen Prozess, CD's in diesem Prozess, werden beendet, und Ihre aktuelle Shell befindet sich immer noch dort, wo Sie sich gerade befinden.

Ich denke "Alias" ist dein Freund. etwas hinzufügen wie:

alias CD_test2-'cd /absolute/path/to/foo/20100801-rev124-test2' 

zu Ihrem .bashrc (oder .kshrc oder zshrc)

bash hat auch die env var CDPATH, die als Anker für das cd in relative Pfade verwendet werden kann. Zum Beispiel:

CDPATH=/usr:.; cd bin 

Ich würde sehen, dass es einen gibt /usr/binund dich dort hinbringt, wenn nicht, dann bring dich rein ./bin. Dies wird Ihnen wahrscheinlich nicht helfen, da Sie wahrscheinlich das gesamte Unterverzeichnis eingeben müssen, damit dies funktioniert:

CDPATH=/root/to/all/testing/dirs:.; cd 20100801-rev124-test2 

Methinks Alias ​​ist das Beste, was Sie bekommen können, zumindest in bash. Es kann bessere Werkzeuge in zsh geben.

Ich denke nicht, dass Skripte hier der beste Weg sind, aber Sie können ein Skript verwenden, um das Verzeichnis zu ändern, wenn Sie es als Quelle aufrufen, indem Sie es mit `aufrufen. my_cd_script` und fügen Sie den Befehl `cd` in das Skript ein. laurent vor 13 Jahren 0
1
Dennis Williamson

Midnight Commander ( mc) ist ein Terminalmanager (Zeichenmodus) für Dateimanager. Es verfügt über eine Hot-List-Funktion, mit der Sie Verzeichnisse zu einer Liste von häufig verwendeten Ordnern hinzufügen und sie aus der Liste in cd to auswählen können. Es hat auch eine Schnell-CD-Funktion, mit der Sie ein vollständiges Verzeichnis eingeben können, in das auch in der CD geschrieben werden soll, wenn Sie einen Befehl in der mcBefehlszeile eingeben . Sie können auch die übliche Dateimanager-Navigation ausführen.

Ein weiterer Tastenanschlagschoner ist die Verwendung der CDPATHVariablen der Shell (diese ist in den meisten Shells verfügbar).

CDPATH=/some/top/dir:/another/one cd foo 

Wenn im aktuellen Verzeichnis "foo" vorhanden ist, cdwerden Sie dorthin verschoben. Wenn nicht, durchsucht es die Verzeichnisse CDPATHund bringt Sie zum ersten "Foo", den es dort findet.

0
John Chain

quickcd ist ein nettes Skript zum schnellen Wechseln des Verzeichnisses durch viel Schreibarbeit.

0
Sam Toliman

Werfen Sie einen Blick auf fastcd https://github.com/frazenshtein/fastcd Scheint nützlicher als Aliase

0
Tobi

anc wurde genau für diesen Anwendungsfall entwickelt.

https://github.com/tobimensch/anc

Hier ist ein Auszug aus der README.md:

Beispiele: # machen das aktuelle Verzeichnis zum Standardanker: $ 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

0
Jarmund

Ich habe festgestellt, dass cd -sich das Tippen erheblich verringert, insbesondere wenn viel Zeit darauf verwendet wird, zwischen zwei Verzeichnissen hin und her zu navigieren. cd -wechselt zum vorherigen Verzeichnis.