使用 Bash 的上一个和下一个文件夹

使用 Bash 的上一个和下一个文件夹

这类似于如何使用 bash 命令列出文件夹?。我的文件夹结构格式为 foo/YYYY/MM/DD/HHMM(间隔 10 分钟)。获取上一个和下一个文件夹名称的最简单方法是什么?

我想到

sTimeNow=$(date "${iYear}/${iMnt}/${iDay} ${iHr}:${iMin):00")
sTimeBefore=$(date "${sTimeNow} - "10 minutes")
sTimeAfter=$(date "${sTimeNow} + "10 minutes")

经过一点(轻描淡写...)格式化就可以得到这两个目录。
但是日期计算可能不是最好的方法,而且我缺少日期(这是我最终要修复的目标)

还想到了填充列表

MyList='ls -dr *"
iFolder= get current folder index (how?)
sFolderBefore=$Mylist[${iFolder}-1]  so much easier
sFolderAfter=$Mylist[${iFolder}+1]

(以上所有内容都可能有语法错误,请新手见谅)

答案1

我会尝试类似的事情:

find {root_of_folders} -type d | sort | grep -A 1 "$(basename "$PWD")\$" | tail -1

换句话说:点按所有目录并找到列表中当前目录之后的目录。如果带有结尾,\$它将迭代子目录,如果没有结尾,它将转到同一级别的下一个目录。

对于上一个目录,使用-B 1head -1

编辑:一些增强功能:

  1. 如果文件名包含可以解释为正则表达式语法的内容(特别是括号中的字符),则上述代码会出现问题,因此最好将其设为grep -F(但您不能再使用\$

  2. 如果目录名不是另一个目录的初始部分,则为了避免误匹配,请在前缀中添加 / 以强制从头开始匹配。

因此,改进后的形式为:

find {root_of_folders} -type d | sort | grep -A 1 -F "/$(basename "$PWD")" | tail -1

相关内容