• 09.06.2024, 08:52
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

Brauche Unix(?) Script Hilfe...

Samstag, 5. August 2006, 18:34

Hallo,

im Büro setzen wir ein Script ein das Log File in ein Archiv-Verzeichnis schiebt und dann zippt. Leider trat in letzter Zeit immer ein Fehler beim zippen auf, weil es scheinbar zu viele Dateien sind.

Nun möchte ich den Zip-Befehl
$mygzip *
so umbauen wie den Befehl zum dateien kopieren
find $2 -type f -exec $mycp -p {} $logArchiveDir/$1 \;
d.h. er soll alle dateien einzeln zippen, so wie er schon alle dateien einzeln kopiert.

Leider kenne ich mich mit dem unix script überhauot nicht aus und selbsterklärend ist das ja auch nicht.
Weiss jmd wie ich den gzip befehl so baue dass er wie beim kopieren jede datei einzeln zippt?


Hier das ganze Script:

# ########################################################################################
# Archiviere die Log-Dateien eines Verzeichnisses (kopieren und zippen)
# In-Parameter 1: Verzeichnis, in das die Log-Dateien archivert werden sollen.
# In-Parameter 2: Verzeichnis, das archiviert werden soll.
# ########################################################################################
sichereLogs()
{
# Anlegen des Log-Archivs, in das die Log-Dateien kopiert werden sollen
$mymkdir -p $logArchiveDir/$1
returnValue=$?
if [ $returnValue -ne 0 ]; then
loggeFehler \
"Fehler-Nummer-15: Fehler beim Anlegen des Log-Archivs!" \
"$mymkdir $logArchiveDir/$1 kann nicht erfolgreich ausgefuehrt werden."
return
fi

# kopiere alle Log-Dateien ins Log-Archiv
# (AIX-Special: geht nicht per cp *, weil u.U. die Liste der Dateien zu lang
# wird -> find und jedes einzeln kopieren)
find $2 -type f -exec $mycp -p {} $logArchiveDir/$1 \;
returnValue=$?
if [ $returnValue -ne 0 ]; then
loggeFehler \
"Fehler-Nummer-12: Fehler beim Kopieren des Log-Archivs!" \
"find $2 -type f -exec $mycp -p {} $logArchiveDir/$1 \; kann nicht erfolgreich ausgefuehrt werden. Error: $returnValue"

return
fi

# zippen alle wegkopierten Log-Dateien
cd $logArchiveDir/$1
$mygzip *
returnValue=$?
if [ $returnValue -ne 0 ]; then
loggeFehler \
"Fehler-Nummer-10: Fehler beim Zippen des Log-Archivs!" \
"$mygzip $logArchiveDir/$1/* kann nicht erfolgreich ausgefuehrt werden. Error: $returnValue"
fi
}

Re: Brauche Unix(?) Script Hilfe...

Samstag, 5. August 2006, 18:51

Hi


Du könntest mal versuchen, vor dem Zippen die Dateien zu tar-en, eventuell hilft das.

Re: Brauche Unix(?) Script Hilfe...

Samstag, 5. August 2006, 21:08

eben, warum nutzt du nicht einfach
tar -xzf /pfad/zum/ziel/backup.tgz /pfad/zum/source/*
c++: The power, elegance and simplicity of a hand grenade.

Re: Brauche Unix(?) Script Hilfe...

Samstag, 5. August 2006, 23:42

ich möchte an dem ergebnis eigentlich nichts ändern. und bisher war es so dass jede datei in ein eigenes zip-file kam.
das hat vorteile, da man meist nur ein log-file braucht und dann nicht ein grosses zip-archiv-file runterladen muss.

Re: Brauche Unix(?) Script Hilfe...

Sonntag, 6. August 2006, 01:56

Quellcode

1
for name in `ls /pfad/zu/den/logfiles/*.log`; do cp /pfad/zu/den/logfiles/$name /pfad/zum/speichern/; gzip /pfad/zum/speichern/$name; done

hier werden dann alle dateien einzeln kopiert und dann einzeln gezippt.

Isses das was du brauchst?


das sollte theoretisch auch mit grossen Anzahlen von Dateien kalrkommen...

Du kannst auch bzip2 anstelle von gzip nehmen, das kann theoretisch bessere Kompressionsraten erreichen...
c++: The power, elegance and simplicity of a hand grenade.

Re: Brauche Unix(?) Script Hilfe...

Sonntag, 6. August 2006, 20:44

ich habe folgendes gemacht:

for name in 'ls .'; do gzip $name; done

ergebnis:
gzip: . is a directory -- ignored

???

bei
for name in 'ls ./*'; do gzip $name; done

bringt er auch:

ksh: /usr/bin/gzip: 0403-027 The parameter list is too long.

Re: Brauche Unix(?) Script Hilfe...

Montag, 7. August 2006, 15:27

bei sowas mach ich meistens
find -type f -maxdepth 1 -exec gzip {} ';' ;)

Re: Brauche Unix(?) Script Hilfe...

Montag, 7. August 2006, 16:53

Zitat von »AngryC«

ich habe folgendes gemacht:

for name in 'ls .'; do gzip $name; done

ergebnis:
gzip: . is a directory -- ignored

???

bei
for name in 'ls ./*'; do gzip $name; done

bringt er auch:

ksh: /usr/bin/gzip: 0403-027 The parameter list is too long.


ist ja auch ganz einfach: `statt ' verwenden, dann klappts auch mit dem nachbarn...

((das geshiftete zeichen links neben dem Backspace))

Die anderen Anführungszeichen sind da flasch.
c++: The power, elegance and simplicity of a hand grenade.

Re: Brauche Unix(?) Script Hilfe...

Montag, 7. August 2006, 17:19

Denn: In Backticks (`) stehende Zeichen werden als Kommando betrachtet, ausgeführt und das auf die Standardausgabe geschriebene Ergebnis zurückgegeben.

Re: Brauche Unix(?) Script Hilfe...

Dienstag, 8. August 2006, 02:27

Zitat von »Y0Gi«

Denn: In Backticks (`) stehende Zeichen werden als Kommando betrachtet, ausgeführt und das auf die Standardausgabe geschriebene Ergebnis zurückgegeben.

richtig. In den anderen Anführungszeichen eingeschlossene Zeichenketten werden als Zeichenketten interpretiert.


d.h. dein

for name in 'ls *'; do gzip $name; done

Wurde interpretiert als
gzip ls *

In den Backticks wird jedes einzelne ergebnis von ls an gzip als parameter übergeben.
c++: The power, elegance and simplicity of a hand grenade.

Re: Brauche Unix(?) Script Hilfe...

Dienstag, 8. August 2006, 23:07

ok, danke. ich probier mal eure vorschläge.
is ja blöd mit sowas zu programmieren...

zum glück mach ich in meinem anderen projekt ein fachkonzept, da is es egal ob ` oder ' drin steht :)

Re: Brauche Unix(?) Script Hilfe...

Mittwoch, 9. August 2006, 00:31

Vielleicht solltest du dir einfach mal eine Referenz in digitaler oder Buchform zur Seite legen ;)

Re: Brauche Unix(?) Script Hilfe...

Mittwoch, 9. August 2006, 23:34

mit
find . -type f -exec $mygzip {} \;
hat es funktioniert :)

ich hoffe ich brauche sowas nie wieder, daher will ich mir keine literatur dazu zulegen :P

wie gesagt mach ich lieber fachkonzept (mit word, ppt und xls ;D )