.png)
Ich möchte häufig in das Verzeichnis einer Datei auf meinem Dateisystem wechseln, bin mir aber nicht sicher, wo sich die Datei befindet.
Ich suche so danach:
find -type f -name "myfile.txt"
Nehmen wir der Einfachheit halber an, dass dies ein Ergebnis zurückgibt, z. B.
/ein/sehr/langer/Pfad/den/ich/meine/Datei/nicht/eingeben/möchte/
Normalerweise tippe ich dann Folgendes:
cd $(dirname $(!!))
Um in das Verzeichnis der gesuchten Datei zu wechseln...
Gibt es eine Möglichkeit, dies in ein Shell-Skript oder einen Alias einzufügen, sodass ich im Wesentlichen Folgendes eingeben kann:
cdlast
und es lautet:
cd $(dirname $(!!))
den VERSION der Shell verwenden? Ich habe es versucht und die Shell-Verlauf scheint in Bash-Skripten zu fehlen.
Antwort1
fc -s
führt den vorherigen Befehl erneut aus:
alias cdlast='cd "$(dirname "$(fc -s 2> /dev/null)")"'
Oder verwenden Sie eval "$(history -p !!)"
:
alias cdlast='cd "$(dirname "$(eval "$(history -p !!)")")"'
Antwort2
Sie können einen Alias verwenden.
alias cdlast='cd "$(dirname "$(eval $(history -p !!))")"'
Stellen Sie sicher, dass Sie die doppelten Anführungszeichen verwenden. Diese verhindern, dass die Ergebnisse der Befehlsersetzungen in einzelne Wörter aufgeteilt werden, wenn sie Leerzeichen enthalten, und als Platzhaltermuster interpretiert werden, wenn sie Sonderzeichen wie *
und enthalten ?
.
Antwort3
Ich würde eine Funktion verwenden:
gotofile () { pushd "$(find . -name "$1" -printf "%h\n")"; }
Ersetzen Sie "." durch ein geeignetes Verzeichnis (vielleicht "~")