用于打开当前目录中的最后一个目录的别名

时间:2014-04-29 15:12:27

标签: linux bash shell alias

我想创建别名来打开当前目录中的最后一个目录,也许我认为可以使用此命令获取目录的名称:  ls -1t |头-1 但我不是说要用它。

用函数或别名解决: alias oo =' cd $(ls -1t | head -1)'

3 个答案:

答案 0 :(得分:2)

首先,不要创建别名!来自man bash

  

对于几乎所有目的,别名都被shell函数取代。

因此,除非你真的知道别名机制是什么,并且你知道你真的需要别名,否则请使用函数。

以下函数将使您进入当前目录的最后一个目录(关于按名称排序):

cdlast() {
    local shoptnullglob=$(shopt -p nullglob)
    shopt -s nullglob
    local dirs=( */ )
    $shoptnullglob
    ((${#dirs[@]})) && cd -- "${dirs[-1]}"
}

一些评论:除非设置了shell选项dotglob,否则不会考虑隐藏目录。如果当前目录中没有目录,则该函数不执行任何操作(但返回代码为1)。


如果你需要进入上一个修改过的目录,事情变得棘手(因此更有趣):

cdlast() {
    local shoptnullglob=$(shopt -p nullglob)
    shopt -s nullglob
    local dirs=( */ )
    $shoptnullglob
    ((${#dirs[@]})) || return 1
    local last=${dirs[0]}
    for d in "${dirs[@]}"; do
        [[ $d -nt $last ]] && last=$d
    done
    cd -- "$last"
}

如果您喜欢这些功能,请将它们放在.bashrc

答案 1 :(得分:0)

您提到的命令无法区分文件和目录,请改用以下命令:

LAST_DIR=$(ls -ltr | egrep ^d | awk '{ print $9 }'| head -1)

答案 2 :(得分:0)

dirs=(*/)             # an array of directories in the CWD
last_dir=${dirs[-1]}  # the "last" directory lexicographically