Brauche Shell script Hilfe - Dateinamen auslesen und sequenzen im string speichern

treki

Grünschnabel
Hallo Liebe Shell Experten!
Ich sitze vor einer Aufgabe die ich alleine leider nicht lösen kann (so weit bin ich noch nicht mit shell) :(

Ich möchte ein Shell script erstellen, das in einen bestimmten Ordner die filenamen prüft und mir einen string mit den sequenzen (von-bis) erstellt.
;) Ist schwer zu erklären, daher versuche ich es so:

Ich habe einen Ordner in den mehrere dpx (Bilddateie) liegen z.B.:
333.0000005.dpx
333.0000006.dpx
333.0005002.dpx
333.0005003.dpx
333.1112201.dpx
333.1112202.dpx
333.1112203.dpx

jetzt möchte ich, das das shell script diesen Ordner (z.B.333) durchsucht und mir am ende folgenden String ausgibt:
0000005-0000006,0005002-0005003,1112201-1112203

also immer "von-bis","von-bis",...

habt Ihr vielleicht eine Lösung für mich?
Ich wäre euch unendlich dankbar, da dies meinen Arbeitsaufwand unglaublich verringern würde.


Schönen Gruß
Mike
 
Hi
Also ich mach das mal mit meinen sql Dateien:
Code:
mystring=""
for item in `ls /home/sqldumps/*.sql`
do
mystring=$mystring"-"$item
done
echo $mystring
Dies gibt mir alle Dateinamen mit einem Bindestrich dazwischen auf einer Linie aus.

Nun müsstest du aber noch die Zeile: mystring=$mystring"-"$item
mit regex behanden, so dass 1. die Endung wegfällt und 2. in meinem Fall /home/sqldumps/ wegfällt.
Allerdings habe ich schon so lange nicht mehr mit Regular Expressions gearbeitet, so dass ich dir hier nicht so schnell helfen kann.
Aber mit ein bisschen googlen bekommst du das hin :)

Gruss und viel Erfolg
jeipack
 
Danke jeipack

jetzt muss ich nur noch herrausfinden wie ich die dateien als sequenzen anzeigen lassen kann
hat da jemand ne idee?

Übriegens ich arbeite mit OSX
 
Hi.

Versuch's mal so:
Bash:
res=""
last=""

for i in *; do 
  num="${i%.*}";  # Endung abschneiden
  if [[ "$nr" == +([0-9]) ]]; then
    nr="${num##0}";  # führende Nullen entfernen
    if [[ -z "$last" ]]; then
      res="$num";
    elif [[ $((nr - last)) > 1 ]]; then
      res="$res-$last,$num";
    fi;
    last=$nr;
  else
    res="$res,$num";
  fi
done

echo "$res"
Gruß
 
Zurück