转到xth目录终端

时间:2012-11-09 15:37:12

标签: unix terminal ls cd

在unix shell(特别是Ubuntu)中是否有办法将目录更改为从ls命令打印的xth目录? 我知道你可以用多种方式对目录进行排序,但是使用ls的输出来获取第x个目录?

示例shell:

$ ls
$ first_dir second_dir third_really_long_and_complex_dir

我希望通过传递3(或2以适当的数组格式)进入third_really_long_and_complex_dir。 我知道我可以简单地复制和粘贴,但是如果我已经在使用键盘,那么如果我知道索引就更容易输入类似“cdls 2”之类的东西。

1 个答案:

答案 0 :(得分:0)

交互式会话中cd的主要问题是您通常希望更改正在处理命令提示符的shell的当前目录。这意味着启动子shell(例如脚本)无济于事,因为任何cd调用都不会影响父shell。

但是,根据您使用的shell,您可以定义功能来执行此操作。例如在bash中:

function cdls() {
    # Save the current state of the nullglob option
    SHOPT=`shopt -p nullglob`

    # Make sure that */ expands to nothing when no directories are present
    shopt -s nullglob

    # Get a list of directories
    DIRS=(*/)

    # Restore the nullblob option state
    $SHOPT

    # cd using a zero-based index
    cd "${DIRS[$1]}"
}

请注意,在此示例中,我绝对拒绝解析lsfor a number of reasons的输出。相反,我让shell本身检索一个目录列表(或目录链接)......

那就是说,我怀疑使用这个函数(或任何这种效果)是一个非常好的方法来让自己陷入巨大的混乱 - 比如在更改到错误的目录后使用rm。文件名自动完成已经足够危险,无需强迫自己计数 ...