问题描述
如果我具有以下结构:
directory/
folder1/ <--
folder2/
folder3/
...
cd ../folderX
解决方法
如果您正在使用bash,则可以滥用bash数组并使用此小bash函数:
nextcd() {
if [ $# -gt 0 ]; then
_nextcd_dirs=("$@")
_nextcd_root=$(pwd)
fi
cd "${_nextcd_root}"
if [ -z "${_nextcd_dirs[0]}" ]; then
echo "no more directories to change to" 1>&2
else
cd "${_nextcd_dirs[0]}"
_nextcd_dirs=("${_nextcd_dirs[@]:1}")
fi
}
用法
(每行的开头(直到$
,包括nextcd
)都是提示,指示您当前在文件系统上的位置;其余的行(以{开头{1}})是您正在运行的实际命令):
directory/$ nextcd folder1 folder2 folder3
directory/folder1/$ nextcd
directory/folder2/$ nextcd
directory/folder3/$ nextcd
no more directories to change to
directory/$
因此,第一行(nextcd folder1 folder2 folder3
)调用要迭代的所有目录的函数。您可以使用通配符(nextcd */
),但请记住,脚本在尝试将其更改之前不会检查参数是否为实际目录。
它将立即更改为第一个参数。
无论何时调用nextcd
(没有任何参数),它都会进入下一个原始参数(从列表中删除),直到列表为空(在这种情况下)它将打印出错误并返回到原始目录。
每当您使用参数{strong}调用nextcd
时,旧目录都将被忘记,而您将重新开始。
参数不必位于同一目录中
nextcd /tmp ~ /usr/bin/
,并且可以重复:
nextcd folder1 /tmp folder1 folder2
腔室
它仅在当前shell中用作功能(因此您无法创建为您执行此操作的 script )
,您可以使用历史记录选项:
只需按向上箭头键,即可在命令行中使用先前访问的目录调用cd命令。一直按向上箭头键,直到看到您需要的先前访问的目录,然后按[Enter]。
或
您可能想利用非常方便的推入功能。 Pushd使您可以创建目录位置的堆栈(保存在内存中的列表)。
您可以通过此article进行阅读,其中提供了有关推送功能的更多信息。