Pasta anterior e seguinte usando Bash

0

Isso é semelhante a Como listar pastas usando comandos bash? . Eu tenho uma estrutura de pastas do formato foo / AAAA / MM / DD / HHMM (em intervalos de 10 minutos). Qual é a maneira mais fácil de obter o nome da pasta anterior e seguinte?

Eu pensei em

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

e com um pouco (understament ...) de formatação poderia obter os dois diretórios.
No entanto, a data matemática provavelmente não é a melhor maneira de fazer isso, e eu tenho datas faltando (que é o meu objetivo final para corrigir)

Também pensou em preencher uma lista

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

(todos os acima podem ter erros de sintaxe, desculpas novato)

    
por Miles 19.07.2017 / 05:22

1 resposta

0

Eu tentaria algo como:

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

Em outras palavras: lits todos os dirs e encontrar o que vem depois do atual na lista. Com o final \$ itera seus subdiretórios, sem ele vai para o próximo diretório no mesmo nível.

Para o diretório anterior, você usa -B 1 e head -1 .

Editar: algumas melhorias:

  1. o código acima tem problemas se os nomes dos arquivos contiverem coisas que podem ser interpretadas como sintaxe regexp (caracteres entre parênteses, em particular), então é melhor usar grep -F (mas você não pode mais usar o \$ )

  2. Para evitar ocorrências falsas se um nome de diretório for uma parte não inicial de outro, prefixe com / para forçar a correspondência a ocorrer desde o início.

Então, a forma melhorada é:

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