说我有这个文件夹结构:
MainFolder
Folder1
Folder2
Folder3
...
Folder200
我想编写一个脚本,如果我当前在Folder2中并执行脚本,它将自动切换到列表中的下一个目录,在本例中为Folder3。限制是文件夹可以有任何名称,我无法重命名。
所以我的问题是:
1)如何知道列表中的下一个目录?我想知道一个目录的子目录是否有一个顺序索引号,我可以用它来知道下一个dir。
2)由于我想在脚本末尾显示新目录的名称,有没有办法只显示目录名称? (例如:Folder3而不是/ home / path / to / dir / Folder3,这是“pwd”的结果)
答案 0 :(得分:0)
什么定义了目录的处理顺序?如果您的名称中没有空格和其他特殊字符的目录,您可以使用ls
按顺序列出目录,然后在当前目录后找到该名称:
cwd=$(basename $PWD)
nwd=$(ls .. | awk "/^$cwd$/ { found = 1; next; } { if (found) { print; found = 0 } }")
if [ -d ../$nwd ]
then cd ../$nwd
fi
使用basename $PWD
或${PWD##*/}
找到目录名称(仅限)。
答案 1 :(得分: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
}