2

假设我有这个文件夹结构:

MainFolder
    Folder1
    Folder2
    Folder3
    ...
    Folder200

我想编写一个脚本,如果我当前在 Folder2 中并执行该脚本,它将自动更改到列表中的下一个目录,在本例中为 Folder3。限制是文件夹可以有任何名称,我不能重命名它。

所以我的问题是:

1) 我如何知道列表中的下一个目录是什么?我想知道一个目录的子目录是否有一个顺序索引号,我可以用它来知道接下来是什么目录。

2)由于我想在脚本末尾显示新目录的名称,有没有办法只显示目录名称?(例如:Folder3 而不是 /home/path/to/dir/Folder3 这是“pwd”的结果)

4

2 回答 2

0
  1. 什么定义了处理目录的顺序?如果您的目录名称中没有空格和其他特殊字符,您可以使用ls按顺序列出目录,然后在当前目录后面找到名称:

    cwd=$(basename $PWD)
    nwd=$(ls .. | awk "/^$cwd$/ { found = 1; next; } { if (found) { print; found = 0 } }")
    if [ -d ../$nwd ]
    then cd ../$nwd
    fi
    
  2. basename $PWD使用或找到目录的名称(仅)${PWD##*/}

于 2012-10-20T23:41:53.203 回答
0

假设序列没有漏洞,这应该可行。

cdn()
{
  cd ${PWD%%[0-9]*}$(( $(echo $PWD | sed 's/.*[^0-9]//')+1))
}

编辑:似乎我忽略了“目录可以有任何名称”声明。从你的例子中,我假设他们有一个尾随的数字 id ...

如果您在示例中使用随机名称而不是 Folderxx,则会更清楚。

Edit2:这是一个适合您要求的 shell 函数:

cdn()
{
    for i in $(echo "/\/$(basename $PWD)$/
+1,\$p
Q" | ed -s !"ls -d ../*" | tail -n +2)
    do
        \cd $i 2>/dev/null && echo $(basename $PWD) && break
    done
}
于 2012-10-20T23:53:25.723 回答