ubuntuusers.de

In ein Verzeichnis springen

Status: Ungelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

rhersel

Avatar von rhersel

Anmeldungsdatum:
30. Januar 2007

Beiträge: 920

Wohnort: Zürich

Ich suche eine Möglichkeit um per Command Line (Shell Skript oder ähnlich) direkt in ein beliebiges Verzeichnis zu wechseln ohne mich den Verzeichnisbaum rauf oder runter hangeln zu müssen.

Im Terminal (an belieber Stelle im Verzeichnisbaum) möchte ich z.B. eingeben können: 'cd orca' um dann im Verzeichnis /usr/share/orca zu landen. Der Befehl 'cd' muss natürlich anders heissen, z.B. 'jump' oder so.

Tab Completion ist mir nicht genug; es soll mit einem Befehl gehen. Falls das Verzeichnis nicht eindeutig ist, soll das erst beste genommen werden.

diesch Team-Icon

Avatar von diesch

Anmeldungsdatum:
18. Februar 2009

Beiträge: 5072

Wohnort: Brandenburg an der Havel

Ich hab mir dafür vor einiger Zeit bcd geschrieben, rine Aret "cd mit Lesezeiechen".

Damit kannst du im Verzeichnis /usr/share/orca einmal

1
bcdadd orca

oder in einem beliebigen Verzeichnis

1
bcdadd orca /usr/share/orca

ausführen und ab dann mit

1
bcd orca

von überall her nach /usr/share/orca wechseln.

Benno-007

Anmeldungsdatum:
28. August 2007

Beiträge: 29240

Wohnort: Germany

Moin.

es soll mit einem Befehl gehen.

Evtl. Alias für Lieblingsverzeichnisse anlegen.

Tipp:

cd -

springt bequem zwischen zwei Verzeichnissen hin und her.

Falls das Verzeichnis nicht eindeutig ist, soll das erst beste genommen werden.

Dafür gibt es ein schönes Programm, was ich bisher jedoch nur rudimentär testete, ggf. aber bald auch wieder verstärkt einsetze. Könnte das gewesen sein:

cdargs - bookmarks and browser for cd shell built-in

Wäre für dich sicherlich auch eine Alternative bzw. Ergänzung zu deinem Wunsch, aber ich glaube, es hieß anders. Melde mich gleich mit Edit wieder.

Edit: Endlich gefunden:

       xd - eXtra fast Directory changer

       Often life is not that easy. Often there are multiple expansions  from
       a  given  set of initial characters. E.g., when entering xd ulb xd may
       find several alternatives. E.g.,

        1: /usr/lib/base-config
        2: /usr/lib/bonobo
        3: /usr/lib/bonobo-activation
        4: /usr/local/bin

       If these are the alternatives, this is exactly what xd will show  you.
       Then,  by  simply  pressing  the 3 key (no Enter key required) xd will
       produce the required /usr/local/bin.

Wenn du automatisch Möglichkeit 1 willst (und das zwingend implementiert sein muss), müsstest du mal die Manpage näher ansehen oder überlegen, ob man den Tastendruck für 1 irgendwie automatisieren könnte. Aber das Tool ist echt genial. Leider viel zu selten benutzt, werde das ändern, falls die anderen Möglichkeiten nicht reichen. 😉

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Wohnort: Berlin

Ich habe hier ein fcd.sh (fast-cd):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/bash
#
# find cd. For input foo, find all directories .../.../foo 
# GPLv3 Stefan Wagner (2010, 2012)
#
# doesn't handle blanks in directory names gracefully.
#
fcd () 
{
    list=$(locate $1 | egrep "/$1$")
    count=$(echo $list | wc -w )
    case $count in 
      0) 
        echo "unknown directory: "$1 && return
        # could search for partial matches Doc => Documentation
        ;;
      1) 
	    if [[ -d "$list" ]]; then
		echo "1) match: $list"
		cd "$list"
	    else
	        echo "not a directory: $1"
	    fi
	    ;;
      *) 
      	select directory in $list "/exit/" 
      	do
	    if [[ "$directory" = "/exit/" ]]; then break; fi
            if [[ -d "$directory" ]]; then
		echo "multi) $directory"
		cd "$directory"
	        break
	    else
	        echo "not a directory: "$1 
	    fi
      	done     
        ;;
   esac
}

Man sourced es in der .bashrc, und hat die Funktion fcd zur Verfügung.

Man tippt

1
fcd foobar

und wenn es irgendwo ein Unterverzeichnis foobar gibt, dann zeigt die Funktion den ganzen Pfad und wechselt dahin. Gibt es mehr als einen Treffer, dann wird eine Auswahlliste angezeigt, und man wechselt mit einer Nummer zum x-ten Eintrag.

rhersel

(Themenstarter)
Avatar von rhersel

Anmeldungsdatum:
30. Januar 2007

Beiträge: 920

Wohnort: Zürich

Wie sourced man fcd in der bashrc ?

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Wohnort: Berlin

1
2
3
4
5
6
7
. /home/rhersel/fcd.sh
#  oder
source /home/rhersel/fcd.sh
#  oder
. ~/fcd.sh
#  oder
source ~/fcd.sh

Gesourced wird nicht die Funktion fcd, sondern das Script fcd.sh, welches man zwar fcd nennen könnte, womit man aber manchen Tools wie Gedit und damit sich das Leben schwer macht.

Benno-007

Anmeldungsdatum:
28. August 2007

Beiträge: 29240

Wohnort: Germany

Klingt genau wie xd und das ist wenigstens in der Paketverwaltung drin. ☺ Na ok, dort muss man den Pfad kennen. Dafür ist der dann aber auch eindeutiger.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Wohnort: Berlin

Benno-007 schrieb:

Klingt genau wie xd und das ist wenigstens in der Paketverwaltung drin. ☺ Na ok, dort muss man den Pfad kennen. Dafür ist der dann aber auch eindeutiger.

Welchen Pfad kennen - den des auszuführenden Programms? Den muss man bei mir auch kennen, wenn es mehrere derartige Verzeichnisse gibt.

Aber man muss nicht den ganzen Pfad tippen.

Und was heißt "wenigstens in der Paketverwaltung drin"? 😉 Du kannst ja mein Programm ver-apten und eine Eingabe machen, dass meines auch in die Paketverwaltung kommt. 😉

Benno-007

Anmeldungsdatum:
28. August 2007

Beiträge: 29240

Wohnort: Germany

Aber man muss nicht den ganzen Pfad tippen.

Bei deinem tippt man bei /hier/will/ich/hin nur "hin". Bei xd tippt man stattdessen "hwih". 😉

Ja, ich bin gerade auf Scriptseiten, mich mal inspirieren lassen. Schade, dass viele Schätze nicht paketiert sind. Da ich apt-get sehr schätze, sind damit für mich 90% der interessanteren der tollen Scripte Perlen vor die Säue geworfen - ich tue mich da schwer, meine Systeme derart manuell zuzukleistern. Ich denke dabei an die einfache Wartbarkeit und Neueinrichtung auch an fremden oder supporteten PCs.

Da muss jeder seine Balance finden. Und keine Ahnung, wie man wirklich was in die Ubuntu- oder Debianquellen paketiert bekommt. Wer das entscheidet. Und wo und wie man das meldet und in welcher exakten Form einreicht. Toll, nun habe ich doch glatt den Artikel Pakete für Universe vorschlagen gefunden. Wär das nix für dich bzw. auch diesch? 😉

Grüße, Benno

Kinch

Anmeldungsdatum:
6. Oktober 2007

Beiträge: 1261

Ja, ich verweise mal auf die ZSH:

1. named directory:

Anlegen eines „Lesezeichen”

hash -d foo=/ein/nerviger/pfad

Hat den gewaltigen Vorteil, gegenüber allen „angeflanschten” Lösungen, dass sich auch in die Variablen-Expansion integriert:

cd ~foo
cd ~foo/bar/baz
# oder auch
mv eine_datei ~foo/bar

Außerdem wird "~foo" im Prompt angezeigt.

2. CDPATH.

Ist sowas wie PATH für Ordner.

CDPATH=/usr/share:<weitere ordner>

Danach reicht ein:

cd orca

Dann wird in /usr/share/orca gesprungen, wenn im aktuellen Ordner kein Ordner 'orca' ist.

3. Autocd

Hat nur am Rande was hiermit zu tun, aber mit

setopt autocd

kann man sich das tippen von 'cd' sparen. Einfach ein Pfad angeben reicht.

4. Path-Expand

Weiß gar nicht mehr, wie die Option dafür heißt, aber

/u/sh/pd<tab>

Expandiert zu /usr/share/pdmenu

Gibt bestimmt noch mehr. Bei der ZSH hat man nie aus-entdeckt.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17630

Wohnort: Berlin

Benno-007 schrieb:

Da muss jeder seine Balance finden. Und keine Ahnung, wie man wirklich was in die Ubuntu- oder Debianquellen paketiert bekommt. Wer das entscheidet. Und wo und wie man das meldet und in welcher exakten Form einreicht. Toll, nun habe ich doch glatt den Artikel Pakete für Universe vorschlagen gefunden. Wär das nix für dich bzw. auch diesch? 😉

Als Konsument finde ich die Pakete ja auch genial, aber als Produzent ödet mich diese Paketbautätigkeit an - zumal es ja arg proprietär ist: Zum einen gibt es deb-rpm und Suse - hatten die nicht noch ein drittes Format?

Ich habe einmal ein mittelkleines C/C++ - Projekt mit autoconf/autoinstall vorbereitet: Da liest man sich stundenlang ein, muss die ganze Ordnerstruktur umbauen, und erzeugt dann mit viel Tamtam ein monströses etwas, während der manuell erzeugte Makefile 10 Zeilen lang ist (mit Kommentaren und Leerzeilen für's luftige Aussehen), und auch quasi auf jeder Plattform läuft, und wenn's nicht läuft, dann sind es auch eher die Verwender die wissen, woran es liegt, und nicht ich.

Bei meinem Projekt war es glaube ich eine Abhängigkeit von ncurses, was hier curses, dort ncurses, und da libncurses heißt, und man kann mit 3 autotools eine kl. Armada an Hilfsdateien erzeugen, die dafür sorgen, dass man mit

1
2
3
./configure
./make 
./sudo make install 

auf Solaris und HP-UX, auf IRIX und Linux mein Projekt erzeugen kann.

Jetzt könnte ich noch hingehen und Pakete für Suse, Redhat und Ubuntu erzeugen (plus Debian-Sid und Mint), und für Kubuntu und Xubuntu und Lubuntu und v.a. für 10.04, 11.04, 11.10 und 12.04 und auch schon für 12.10-alpha, und das alle halbe Jahre wieder.

Da ich all die Unixe nicht habe, die Linuxflavours nicht habe und nicht haben will, und auch nicht 3-5 Sorten Ubuntu in 3-5 Versionen will ich mich damit gar nicht befassen, es sei denn ich wüßte jetzt, dass ich eine größere Nutzergemeinde habe, die es wünscht, und die noch größer sein könnte.

Das Script hängt ab von locate, egrep und bash. Alle 3 gibt es seit Äonen für Linux und m.W. andere Unixe. Das Script benutzt auch keine brandheißen Bashfeatures und sollte daher überall laufen wo die bash läuft.

Bislang ist der bekannte Nutzerkreis noch so klein, dass es weniger Arbeit für mich ist jeden Fall individuell zu supporten. Wenn Du das Ticket zahlst, Übernachtung und Verpflegung, dann komme ich auch persönlich vorbei und installiere es. ☺

Ich gebe übrigens zu, dass es beim ersten Mal toll ist, wenn

1
2
3
./configure
./make 
./sudo make install 

den Bildschirm vollschreiben, und das Bauen 5 Sekunden dauert, nicht 0,5. Aber ist es das wert?

Inkane

Anmeldungsdatum:
17. Oktober 2010

Beiträge: 306

Hm, was es auch noch gibt ist z, was ganz praktisch ist wenn man immer zu den selben Ordnern navigiert. Da tippt man dann etwa z work ein und landet z.B. in meinen Fall in ~/data/projects/ccr_p/workdir.

Antworten |