# Suche Script zum Sichern von Dateien



## Nante (3. September 2007)

Hallo,

ich suche Hilfe von erfahrenen Script-Programmiereren!

Ein script soll eine Menge von Dateien in ein tar-Archiv packen und dann löschen. Hier mal ein Beispiel, an dem ich nicht weiter kommen.

if [ 'ls *.log | ws -l' -gr 0]
then
  tar cfz logs.tar *.log
  rm *.log
fi

So funktioniert es aus zwei Gründen nicht:
1. liefert 'ls *.log | ws -l' keinen numerischen wert, kann also mit gr nicht.
2. wenn die Ergebnismenge 0 ist, liefert ls eine Fehlermeldung.

Wie ihr seht, hab ich das Problem erkannt, aber keine Lösung 

Wer kann mir helfen?

Danke und Gruß
Nante


----------



## OnlyFoo (3. September 2007)

Versuchs mal so:


```
if [ "$( echo *.log )" != "*.log" ] ; then
    tar -czf logs.tar.gz *.log
    rm -f *.log
fi
```


----------



## deepthroat (4. September 2007)

Hi.

Damit könnte es auch noch ein paar Probleme geben.

Wenn du Bash benutzt, könnte die Shell Option "nullglob" angeschaltet sein, dann wird falls keine Dateien für das Muster ermittelt werden konnten nicht "*.log" zurückgegeben, sondern nichts.

Außerdem könnte es sein, das du Dateien löscht die du gar nicht archiviert hast - denn du wendest das Muster ja dreimal an - bei jedem Mal kann ein anderes Ergebnis zustande kommen.

Ich würde dir raten, mit Arrays zu arbeiten, und die Dateien nur bei erfolgreicher Erstellung des Archivs zu löschen:
	
	
	



```
declare -a files
shopt -s nullglob # nullglob anschalten.

files=( $( ls *.log ) )
if [[ "${#files[@]}" -gt 0 ]]; then
  tar -czf logs.tar.gz "${files[@]}" && rm "${files[@]}"
fi
```
Gruß


----------

