Vorheriger und nächster Ordner mit Bash

359
Miles

Dies ist ähnlich wie beim Auflisten von Ordnern mit Bash-Befehlen? . Ich habe eine Ordnerstruktur des Formats foo / JJJJ / MM / TT / HHMM (in Abständen von 10 Minuten). Was ist der einfachste Weg, um den vorherigen und den nächsten Ordnernamen zu erhalten?

ich dachte an

sTimeNow=$(date "$/$/$ $:$ - "10 minutes") sTimeAfter=$(date "$ + "10 minutes") 

und mit ein bisschen (Understatement ...) der Formatierung könnten die beiden Verzeichnisse erhalten werden.
Allerdings ist die Datumsberechnung wahrscheinlich nicht der beste Weg, um darüber zu gehen, und mir fehlen Termine (was mein endgültiges Ziel ist, das zu beheben)

Dachte auch daran, eine Liste zu füllen

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

(Alle oben genannten haben wahrscheinlich Syntaxfehler, entschuldigt Neuling)

0

1 Antwort auf die Frage

0
xenoid

Ich würde so etwas versuchen:

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

Mit anderen Worten: Legt alle Verzeichnisse und sucht nach dem aktuellen Verzeichnis in der Liste. Mit der Endung werden \$Ihre Unterverzeichnisse iteriert, ohne dass es zum nächsten Verzeichnis auf derselben Ebene geht.

Für das vorherige Verzeichnis verwenden Sie -B 1und head -1.

Edit: einige Verbesserungen:

  1. Der obige Code hat Probleme, wenn Dateinamen Dinge enthalten, die als Regex-Syntax interpretiert werden können (insbesondere Zeichen in Klammern). Machen Sie dies daher besser als a grep -F(aber Sie können die nicht mehr verwenden \$).

  2. Um falsche Treffer zu vermeiden, wenn ein Verzeichnisname ein nicht initialer Teil eines anderen ist, muss ein / vorangestellt werden, damit die Übereinstimmung von Anfang an auftritt.

Die verbesserte Form ist also:

find -type d | sort | grep -A 1 -F "/$(basename "$PWD")" | tail -1 
Schön, ich habe / *` (also `mv '{} / *' .. / .. / .....`), und (2) `-v` zu "mv" oder sogar anstelle von "-exec mv" tun Sie "-exec echo mv", um zu sehen, was ausgeführt werden würde. Miles vor 6 Jahren 0
Es funktioniert auch nur für diesen Tag. z. B. von foo / 2017/03/02/0000 heißt es, dass das vorherige foo / 2017/03/02/0000 ist. Funktioniert perfekt, wenn es noch am selben Tag ist. Miles vor 6 Jahren 0
Es gibt einen Unterschied, wenn es Unterverzeichnisse gibt. Da Sie jedoch ".." verwenden, müssen Sie nur eine Ebene haben. xenoid vor 6 Jahren 0
Das liegt daran, dass Sie ".." und nicht "/ path / to / foo" verwenden. xenoid vor 6 Jahren 0