【问题标题】:Is there any command to step down one directory in shell?(when there is only one sub-directory)是否有任何命令可以在shell中降级一个目录?(当只有一个子目录时)
【发布时间】:2018-01-26 00:56:27
【问题描述】:

要上一个目录,我会写 cd .. 是否有任何命令适用于只有一个子目录的相反情况?

假设我在:

目录1/目录2/

dir2只有一个子目录dir3

有没有什么捷径可以把一个目录从dir2降级到dir3而不写子目录(dir3)的名字?

【问题讨论】:

  • 我所知道的最好的快捷方式是键入 cd 后跟目录的第一个字母,然后按 tab 自动完成
  • 谢谢@Link0352 这是一个很好的选择,我还没有意识到:)

标签: shell unix command-line


【解决方案1】:

本身没有这样的命令,但你可以通过输入cd */ 来欺骗 cd 命令;-)

【讨论】:

  • 我猜没有命令可以移回一个目录,@polentino: cd */ won't work in ksh :-)
【解决方案2】:

在我提出问题的时候,我不知道 shell 会使用 Tab 键自动完成。

在这种情况下,我只需键入cd,然后按Tab,就会显示目录名称,因此我可以按Enter 移动到目录。

【讨论】:

    【解决方案3】:

    我在学习 shell 时也有类似的想法,并在 cd 周围写了一个包装器来做你想做的事。它变成了一些更复杂的东西。如果您有名为 folder1 和 folder2 的文件夹,您可以键入:cdd 2 如果只有一个文件夹,您只需键入:cdd

    它还具有与 ksh 的 cd 路径替换类似的功能,用 2 个 args 替换(如果在 /home/tom,您可以键入以下内容以到达 /home/bob:cdd tom bob)。 如果你传递一个存在的文件夹,它也像普通的 cd 命令一样工作。

    它是不久前写的,所以它可能不是最漂亮的,但它确实有效。 它还在末尾添加了一个 ls,您可以将其删除。

    要注意的另一件事是,您可以(至少在 bash 中)键入以下内容以转到您所在的上一个目录:cd -

    function cdd()
    {
        if [[ $3 != "" ]]; then
            printf "~~~ cdd can only take 1 or 2 arguments, you specified 3 or more\n";
            return;
        else
            if [[ $2 != "" ]]; then
                ARG=$(pwd | sed "s/$1/$2/g");
                cd $ARG;
            else
                if [[ $1 == "" ]]; then
                    cd $(ls -d */ | head -1);
                else
                    if [[ -d $1 ]]; then
                        cd $1;
                    else
                        if [[ -d $(ls -F | grep "/$" | grep "^$1" | head -1) ]]; then
                            cd $(ls -F | grep "/$" | grep "^$1" | head -1);
                        else
                            if [[ -d $(ls -F | grep "/$" | grep "$1/$" | head -1) ]]; then
                                cd $(ls -F | grep "/$" | grep "$1/$" | head -1);
                            else
                                if [[ -d $(ls -F | grep "/$" | grep "$1" | head -1) ]]; then
                                    cd $(ls -F | grep "/$" | grep "$1" | head -1);
                                else
                                    if [[ -d $(ls -a -F | grep "/$" | grep "$1" | head -1) ]]; then
                                        cd $(ls -a -F | grep "/$" | grep "$1" | head -1);
                                    else
                                        printf "~~~ Folder not found...\n";
                                        return 3;
                                    fi;
                                fi;
                            fi;
                        fi;
                    fi;
                fi;
            fi;
        fi;
        if [[ $? == 0 ]]; then
            ls --color=auto -a --color;
        fi
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-12
      • 2011-04-18
      • 2017-10-13
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 2014-12-19
      • 1970-01-01
      相关资源
      最近更新 更多