• 18.07.2025, 18:07
  • S’inscrire
  • Connexion
  • Vous n’êtes pas connecté.

 

AngryC

Full Member

Brauche Unix(?) Script Hilfe...

samedi 5 août 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
}

hurra

God

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

samedi 5 août 2006, 18:51

Hi


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

Clark

God

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

samedi 5 août 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.

AngryC

Full Member

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

samedi 5 août 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.

Clark

God

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

dimanche 6 août 2006, 01:56

Code source

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.

AngryC

Full Member

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

dimanche 6 août 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.

composer

Full Member

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

lundi 7 août 2006, 15:27

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

Clark

God

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

lundi 7 août 2006, 16:53

Citation de "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.

Y0Gi

God

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

lundi 7 août 2006, 17:19

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

Clark

God

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

mardi 8 août 2006, 02:27

Citation de "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.

AngryC

Full Member

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

mardi 8 août 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 :)

Y0Gi

God

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

mercredi 9 août 2006, 00:31

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

AngryC

Full Member

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

mercredi 9 août 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 )