![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrati | Regole Forum | Collegamenti | Album | FAQ | Members List | Calendario | Ricerca | Today's Posts | Mark Forums Read |
| Shell scripting e di programmazione Pubblica domande su KSH, CSH, SH, Bash, Perl, PHP, sed, awk e da altri script di shell e linguaggi di scripting shell qui. |
Più di UNIX e Linux Forum Argomenti potreste trovare utili
|
||||
| Filo | Thread Starter | Forum | Risposte | Ultimo Post |
| decomprimere i file gzip particolare tra i normali file di dati | thepurple | Shell scripting e di programmazione | 4 | 11-30-2007 11:17 AM |
| gzip tutti i file in una directory | er_ashu | UNIX for Dummies Domande & Risposte | 2 | 11-06-2007 09:05 AM |
| Necessità di gzip file di grandi dimensioni | LordJezo | UNIX for Dummies Domande & Risposte | 2 | 05-02-2005 05:18 PM |
| gzip, più file | smbodnar | UNIX for Dummies Domande & Risposte | 2 | 11-11-2002 04:29 PM |
| Due file creati per ognuno? | Atama | UNIX for Dummies Domande & Risposte | 1 | 04-12-2002 05:44 PM |
![]() |
|
|
LinkBack | Thread Tools | Cerca in questo Thread | Rate Thread | Modalità di visualizzazione |
|
|
|
||||
|
Gzip file che vengono creati
Ciao. Ho uno script di query che sono stumped su cui spero di poter contribuire con. In sostanza, ho un ksh script che invita a creare un processo n numero di file binari. Questi file hanno una dimensione massima di 1Gb. Il processo in grado di scrivere n numero di file in una sola volta (funzionamento in parallelo) sulla base dei parametri inseriti in paralellisation lo script di inizio. Normalmente ci si aspetta che tale processo completo e quindi gzip tutti i file individualmente (gzip *. dmp per esempio). Tuttavia, su alcuni sistemi che non dispongono di spazio su disco sufficiente per aspettare fino a che tutti i file sono stati 1Gb prodotto. Ho già scritto un po 'di codice per i file gzip in parallelo (vedi sotto), tuttavia, devono ora gzip loro in parallelo, mentre il primo processo in esecuzione. Ho bisogno di stare attenti a non tentare di gzip tutti i file attualmente in fase scritta (fino a n dal parallelo di comando), quindi una sorta di loop sarà richiesto. E voglio mantenere la possibilità di parallelo gzip, se possibile. Codice:
...
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
Can anyone help me scrivere un po 'di codice per utilizzare questo tipo solaris 8/9/10 strumenti utilizzando la Korn shell. Perl comandi dovrebbe essere possibile (vers 5.6.1 installato). Molte grazie e Cordiali saluti, Stefano. |
|
||||
|
Grazie cfajohnson. Vorrei provare a inserire il tuo raccomandazioni.
Tuttavia, per il mio vero problema, l'oracolo di esportazione di utilità (il processo che crea i file binari) creerà un file e poi che lo riempia con i dati fino a 1Gb raggiunge in termini di dimensioni, quindi si creerà un nuovo file. Se usiamo parallelisation, si creerà n numero di file (uno per ogni processo parallelo) e riempirli. L'ultimo file binari creato e, probabilmente, avrebbe potuto essere il meno 1Gb. Il mio pensiero era quello di chiamare il gzip funzioni di utilità prima di esportazione e quindi attendere che i file gzip, vale a dire solo gzip file se ci sono più di parallelo numero n. Quindi, se in parallelo è stato fissato a 4, solo il 5. Gzip file. Pensare che attraverso, ho difficoltà a individuare il file che il programma dovrebbe gzip gzip come possiamo non solo i file zip di 1Gb di dimensioni in quanto potrebbe essere ancora finitura iscritto al file, ecc Si può usare qualcosa di simile fusore per identificare se l'esportazione strumento ha finito con il file? forse una qualche forma di loop gzip che attende per il fusore per tornare pid non per un file di esportazione è zip e poi? Ho guardato l'esportazione, e può vedere che, quando l'utilità è finito di scrivere il file non più chiuse in modo questo potrebbe essere fattibile. Vorrei accogliere le vostre idee. Con i migliori saluti. |
|
||||
|
Citazione:
ma ho capito cosa vuoi dire.Ho trovato alcuni che giocano e che il programma di esportazione creerà un file di 4k inizialmente, poi interromperne l'utilizzo, mentre si basa su un elenco di oggetti per l'esportazione. E 'quindi restituisce un blocco sul file e riempie il file fino a 1GB dimensioni. Ho modificato il mio codice di utilizzare un test del fusore e per verificare che il file è di dimensioni superiori a 4k e non è stato utilizzato da qualsiasi utente. Trovo che, se i uso parallelismo in materia di esportazione il programma creerà n numero di file e poi li popolano, si può iniziare con i file 1,2,3, e 4, ma di 1,3, e 4 improvvisamente giungere 1Gb crea 5,6,7 modo per continuare il parallelo compiti. 2 file non è ancora completa (per qualsiasi motivo). File di 1,3, e 4 sono attualmente inutilizzati, ma il gzip_func non sembra voler gzip i file fino a 2 è anche file inutilizzati - che spesso non possono essere fino alla fine delle esportazioni. Potete dare un'occhiata al codice qui sotto per vedere se è possibile individuare un evidente errore? Voglio che il codice per avviare l'effettiva quando la latta del soddisfare di Gzipping 2 prove sono passati, se è in grado solo 1 gzip file o fino a n fili. Qualsiasi idee? Codice:
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
|
![]() |
| Segnalibri |
| Thread Tools | Cerca in questo Thread |
| Modalità di visualizzazione | Vota questo thread |
|
|