bash 有目录历史记录吗?

bash 有目录历史记录吗?

是否有类似 bash 的反向搜索历史记录(Ctrl- R)的东西,但仅适用于目录?

我有一些想要跳转到的深层文件夹层次结构,因此我想使用类似反向搜索历史记录之类的功能,但它只查找文件夹名称并提供绝对路径。

本质上,它会给出与使用类似的结果!?,但仅cd在前面匹配命令,您可以逐步浏览结果和完整路径。

到目前为止,我发现的最佳解决方案是标记

答案1

看一下自动跳转

最常用的 shell 命令之一是“cd”。我的朋友中有一个快速调查显示,他们输入的所有命令中,有 10% 到 20% 实际上是 cd 命令!不幸的是,使用 cd 从系统的一个部分跳转到另一个部分需要您输入几乎完整的路径,这不太实用,而且需要大量击键。

autojump 是一种更快捷的文件系统导航方式。它的工作原理是维护一个数据库,其中包含您从命令行使用最多的目录。jumpstat 命令显示数据库的当前内容。您需要进行一些工作才能使用数据库。一旦您的数据库相当完整,您就可以通过键入以下内容“跳转”到常用“cd”的目录:
j dirspec

答案2

cd -

即“cd[空格][连字符]”命令,它会转到你之前所在的目录,本质上是一个“深度 1 的历史记录”。重复“cd -”会在两个目录之间来回切换。

引用手册页:

应支持以下操作数:[...]

当使用 [连字符] 作为操作数时,这应等同于以下命令:

      cd "$OLDPWD" && pwd

不幸的是,我不知道真正的内置目录历史记录。

答案3

您可以使用、、内置命令构建自己的cd命令 。pushdpopddirs

用法

  • cd -- (列出当前历史记录)

  • cd -num(转到 num 目录)

  • cd - (返回上一目录)


function cd () 
{ 
    local hnum=16;
    local new_dir index dir cnt;
    if ! [ $# -eq 0 ]; then
        if [[ $# -eq 2 && $1 = "--" ]]; then
            shift;
        else
            if ! { 
                [ $# -eq 1 ] && [[ $1 =~ ^(-[0-9]{,2}|-|--|[^-].*)$ ]]
            }; then
                builtin cd "$@";
                return;
            fi;
        fi;
    fi;
    [ "$1" = "--" ] && { 
        dirs -v;
        return
    };
    new_dir=${1:-$HOME};
    if [[ "$new_dir" =~ ^-[0-9]{,2}$ ]]; then
        index=${new_dir:1};
        if [ -z "$index" ]; then
            new_dir=$OLDPWD;
        else
            new_dir=$(dirs -l +$index) || return;
        fi;
    fi;
    pushd -- "$new_dir" > /dev/null || return;
    popd -n +$hnum &> /dev/null || true;
    new_dir=$PWD cnt=1;
    while dir=$(dirs -l +$cnt 2> /dev/null); do
        if [ "$dir" = "$new_dir" ]; then
            popd -n +$cnt > /dev/null;
            continue;
        fi;
        let cnt++;
    done
}

答案4

我已经做了脚本具有类似功能oh-my-zsh 的dirs -v在 bash 上运行的命令。如果你曾经使用过哦我的天啊,你可能已经注意到,每次退出终端时,命令提供的目录历史记录dirs -v都会被重置。如果你使用这个,就不会发生这种情况脚本, 然而。

功能:

  • 使用 显示最近使用的 10 个目录的列表d

  • 通过输入列表中的目录编号来跳转到列表中的任意目录。

  • 每次访问目录时,目录路径都会放在列表顶部。

相关内容