不要使用其他答案中的commandlinefu解决方案:这是不安全¹且效率低下的。²相反,如果使用bash
,则只需使用以下功能。为了使它们持久,请将它们放入您的中.bashrc
。请注意,我使用全局顺序是因为它是内置的并且很容易。通常,在大多数语言环境中,全局顺序都是按字母顺序排列的。如果没有下一个或上一个目录,您将收到一条错误消息。特别是,如果您尝试在根目录next
或prev
中尝试该错误,则会看到该错误/
。
## bash and zsh only!
# functions to cd to the next or previous sibling directory, in glob order
prev () {
# default to current directory if no previous
local prevdir="./"
local cwd=${PWD##*/}
if [[ -z $cwd ]]; then
# $PWD must be /
echo 'No previous directory.' >&2
return 1
fi
for x in ../*/; do
if [[ ${x#../} == ${cwd}/ ]]; then
# found cwd
if [[ $prevdir == ./ ]]; then
echo 'No previous directory.' >&2
return 1
fi
cd "$prevdir"
return
fi
if [[ -d $x ]]; then
prevdir=$x
fi
done
# Should never get here.
echo 'Directory not changed.' >&2
return 1
}
next () {
local foundcwd=
local cwd=${PWD##*/}
if [[ -z $cwd ]]; then
# $PWD must be /
echo 'No next directory.' >&2
return 1
fi
for x in ../*/; do
if [[ -n $foundcwd ]]; then
if [[ -d $x ]]; then
cd "$x"
return
fi
elif [[ ${x#../} == ${cwd}/ ]]; then
foundcwd=1
fi
done
echo 'No next directory.' >&2
return 1
}
¹它不能处理所有可能的目录名称。 解析ls
输出绝不是安全的。
² cd
可能不需要非常高效,但是6个过程有点多余。
[[ -n $foundcwd ]]
bsh和zsh ,则您的答案同样适用。非常好,感谢您撰写本文。