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



## treki (1. Juni 2007)

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


----------



## jeipack (2. Juni 2007)

Hi
Also ich mach das mal mit meinen sql Dateien:

```
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


----------



## treki (2. Juni 2007)

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


----------



## deepthroat (4. Juni 2007)

Hi.

Versuch's mal so:
	
	
	



```
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ß


----------

