我有任何命令在shell中降低一个目录吗?(如果只有一个子目录)

时间:2017-08-17 14:33:13

标签: shell unix command-line

要上一个目录我写cd .. 是否有任何命令可以用于只有一个子目录的反向情况?

让我们说我在:

DIR1 / DIR2 /

dir2只有一个子目录dir3

是否有任何捷径可以将一个目录从dir2降级为dir3,而无需编写子目录(dir3)的名称?

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

在我提出问题时,我还不知道使用Tab键可以自动完成shells的操作。

在这种情况下,我只需要键入cd,按Tab,目录名称就会显示出来,因此我可以按Enter移至目录。

答案 2 :(得分:0)

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

它还具有与 ksh 的 cd 路径替换类似的功能,带有 2 个参数(如果在 /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
}