Это похоже на Как вывести список папок с помощью команд 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 ответ1

0

Я хотел бы попробовать что-то вроде:

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

Другими словами: подсвечивает все каталоги и находит тот, который идет после текущего в списке. С окончанием \$ он перебирает ваши подкаталоги, без него он переходит в следующий каталог того же уровня.

Для предыдущего каталога вы используете -B 1 и head -1 .

Редактировать: некоторые улучшения:

  1. Приведенный выше код имеет проблемы, если имена файлов содержат вещи, которые можно интерпретировать как синтаксис регулярных выражений (в частности, символы в скобках), поэтому лучше сделать это grep -F (но вы больше не можете использовать \$)

  2. Чтобы избежать ложных попаданий, если имя каталога не является начальной частью другого, добавьте к / префикс, чтобы принудительное совпадение происходило с самого начала.

Итак, улучшенная форма это:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .