![]() |
|
|
Google unix.com
|
|||||||
| Foren | Registrieren | Forum-Regeln | Links | Alben | FAQ | Benutzerliste | Kalender | Suche | Die heutige Beiträge | Alle Foren als gelesen markieren |
| Shell Programmierung und Scripting Post Fragen zu ksh, csh, sh, bash, Perl, PHP, sed, awk und anderen Shell-Skripte und Shell-Scripting-Sprachen hier. |
Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
|
||||
| Faden | Thread Starter | Forum | Antworten | Last Post |
| gzip-Dateien entpacken insbesondere unter den normalen Daten-Dateien | thepurple | Shell Programmierung und Scripting | 4 | 11-30-2007 11:17 AM |
| gzip alle Dateien in einem Verzeichnis | er_ashu | UNIX for Dummies Questions & Answers | 2 | 11-06-2007 09:05 AM |
| Müssen gzip Große Dateien | LordJezo | UNIX for Dummies Questions & Answers | 2 | 05-02-2005 05:18 PM |
| gzip, mehrere Dateien | smbodnar | UNIX for Dummies Questions & Answers | 2 | 11-11-2002 04:29 PM |
| Zwei Dateien, die für alle? | Atama | UNIX for Dummies Questions & Answers | 1 | 04-12-2002 05:44 PM |
![]() |
|
|
LinkBack | Thread Tools | Suche diesen Thread | Rate Thread | Anzeige-Modi |
|
|
|
||||
|
Gzip-Dateien, wie sie erstellt
Hallo. Ich habe eine Scripting-Abfrage, dass ich ratlos bin, an dem ich hoffe, Sie können mit helfen. Grundsätzlich habe ich ein Skript, ksh fordert einen Prozess zu schaffen n Zahl der binären Dateien. Diese Dateien haben eine maximale Größe von 1 GB. Der Prozess kann schreiben n Anzahl der Dateien auf einmal (Parallel-Betrieb) auf der Grundlage der paralellisation Parameter in das Skript an den Start. Im Normalfall würden wir warten, bis dieser Prozess abgeschlossen und dann gzip alle Dateien einzeln (gzip *. dmp zum Beispiel). Jedoch auf einigen Systemen wir haben nicht genug Speicherplatz zu warten, bis alle Dateien 1Gb wurden. Ich habe zuvor einige gzip-Code, um die Dateien parallel (siehe unten), aber ich muss jetzt gzip parallel, während sie in den ersten Prozess läuft. Ich muss darauf achten, nicht zu versuchen, alle Dateien gzip derzeit geschrieben (bis zu n aus dem parallel-Kommando), so eine Art Endlosschleife erforderlich. Und ich will, um die Möglichkeit, parallel gzip, wenn möglich. Code:
...
gzip_func() {
started=0
threads=4
for filename in `ls -1 ${EXP_DIR}/*.dmp`
do
if [[ ${started} -lt ${threads} ]]; then
let started=started+1
echo "gzip ${filename}"
( $GZIPCMD ${filename} ) &
list_of_pids="${list_of_pids} $!"
else
print "wait ${list_of_pids}"
wait ${list_of_pids}
list_of_pids=""
started=0
fi
done
}
...
my_binary_file_creation_process
...
while [ `find ${EXP_DIR} -name \*.dmp|wc -l` -gt "0" ]; do
gzip_func
print "wait ${list_of_pids}"
wait ${list_of_pids}
list_of_pids=""
done
Kann jemand mir helfen, schreiben Code für diese Verwendung von Standard-Solaris 8/9/10 Werkzeuge mit der Korn-Shell. Perl Befehle sollte möglich sein, (Vers. 5.6.1 installiert ist). Vielen Dank und Beste Grüße, Stephen. |
|
||||
|
Dank cfajohnson. Ich werde versuchen, Ihre Empfehlungen.
Doch für meine eigentliche Problem, die Oracle-Export-Programm (der Prozess, der die Binär-Dateien) erstellt eine Datei und dann füllt sie mit Daten von bis zu 1 GB groß sind, dann wird es eine neue Datei. Wenn wir Parallelisierung, wird es schaffen n Anzahl der Dateien (eine für jede Parallel-Prozess) und füllen Sie sie. Die endgültige binäre Dateien erstellt, und wahrscheinlich wäre weniger die 1Gb. Mein Gedanke war, um die gzip Funktion vor dem Export Utility und dann haben sie warten auf gzip-Dateien, dh nur gzip-Dateien, wenn es mehr als die Anzahl parallel n. Also, wenn parallel wurde auf 4, nur der 5. gzip-Datei. Denken sie durch, ich finde es schwer zu erkennen, welche Datei das Programm gzip sollte gzip, wie wir können nicht nur ZIP-Dateien von 1 GB Größe, da es noch werden Weiterverarbeitung schriftlich zu den Akten, usw. Kann ich so etwas wie Fixiereinheit zu ermitteln, wenn die Export-Tool ist fertig mit der Datei? vielleicht irgendeine Form von looping gzip erwartet, dass die Fixiereinheit wieder keine PID für eine Export-Datei und dann Reißverschlüsse es? Ich habe mir bei einem Export und können sehen, dass, wenn das Programm fertig ist das Schreiben der Datei nicht mehr gesperrt ist, so könnte dies möglich sein. Ich würde es begrüßen, Ihre Ideen. Mit besten Grüßen. |
|
||||
|
Nicht die erleuchtenden Erklärung aber ich verstehe was du meinst.Ich habe dazu ein paar Spiel-und festgestellt, dass die Ausfuhr-Programm erstellt eine Datei von 4k zunächst, dann stoppen Sie es, während es baut eine Liste von Objekten für den Export. Es liefert dann eine Sperre für die Datei und füllt die Datei bis zu der Größe von 1 GB. Ich veränderte mein Code für die Verwendung eines du und Fixiereinheit Test um zu prüfen, ob die Datei größer als 4k und wurde nicht von jedem Benutzer. Ich finde, dass, wenn ich Parallelität der Ausfuhr wird das Programm erstellen n Anzahl der Dateien und dann bevölkern sie, es kann Dateien mit 1,2,3 und 4, sondern 1,3, und 4 erreichen 1Gb plötzlich so schafft 5,6,7, die parallel Aufgaben. Datei 2 ist noch nicht vollständig (aus welchem Grund auch immer). Dateien 1,3 und 4 sind jetzt nicht genutzte, aber die gzip_func scheint nicht zu wollen, bis die Dateien gzip Datei 2 ist auch nicht genutzte -, die oft vielleicht nicht bis zum Ende der Export. Können Sie bitte einen Blick auf den Code unten und sehen Sie, ob Sie vor Ort ein offensichtlicher Fehler? Ich möchte, dass der Code wirklich gzipping beginnen, wenn die 2 tests werden, unabhängig davon, ob es nur 1 Datei gzip oder bis zu n Fäden. Irgendwelche Ideen? Code:
gzip_func() {
started=0
threads=4
for filename in ${EXP_DIR}/*.dmp
do
# Check if file is bigger than 8K and is not being used
if [ `du -sk "${filename}"|awk '{print $1}'` -gt "8" ] && [ `fuser "${filename}" 2>/dev/null | wc -m` -eq "0" ]; then
# Loop through files until 4 are started (to match threads)
if [ ${started} -lt ${threads} ]; then
started=$(( $started + 1 ))
echo "gzip ${filename}"
$GZIPCMD "${filename}" &
list_of_pids="${list_of_pids} $!"
else
print "wait ${list_of_pids}"
wait ${list_of_pids}
list_of_pids=""
started=0
fi
else
echo "${filename} is still being written to, trying next file..."
fi
done
}
# Export creation - note done in background to allow gzip loop to run
expdp '"/ as sysdba"' directory=DPUMP_DIR_ADHOC dumpfile=ram6_full%U.dmp logfile=ram6_full.log filesize=1024m full=y parallel=4 &
while [ `find ${EXP_DIR} -name \*.dmp|wc -l` -gt "0" ]; do
gzip_func
print "out of loop wait ${list_of_pids}"
wait ${list_of_pids}
list_of_pids=""
sleep 5
done
|
![]() |
| Lesezeichen |
| Thread Tools | Suche diesen Thread |
| Anzeige-Modi | Rate this thread |
|
|