我经常想更改到文件系统上某个文件的目录,但我不确定该文件在哪里。
我像这样搜索它:
find -type f -name "myfile.txt"
为了简单起见,我们可以说这会返回一个结果,例如。
/some/super/long/path/that/i dont/want/to/type/myfile.txt
然后我通常会输入:
cd $(dirname $(!!))
要切换到我正在搜索的文件的目录......
无论如何,是否可以将其放入 shell 脚本或别名中,这样我基本上可以输入:
cdlast
它运行:
cd $(dirname $(!!))
使用外壳的历史记录?我已经尝试过了,bash 脚本中似乎缺少 shell 历史记录。
答案1
fc -s
再次运行之前的命令:
alias cdlast='cd "$(dirname "$(fc -s 2> /dev/null)")"'
或者使用eval "$(history -p !!)"
:
alias cdlast='cd "$(dirname "$(eval "$(history -p !!)")")"'
答案2
您可以使用别名。
alias cdlast='cd "$(dirname "$(eval $(history -p !!))")"'
确保其中有双引号。如果命令替换的结果有空格,则它们不会被分割成单独的单词;如果命令替换的结果有特殊字符(如*
和 ) ,则它们会被解释为通配符模式?
。
答案3
我会使用一个函数:
gotofile () { pushd "$(find . -name "$1" -printf "%h\n")"; }
改变 ”。”适当的某个目录(也许是“~”)