![]() |
|
|
google unix.com
|
|||||||
| Foros | Registro | Reglas de los Foros | Enlaces | Álbumes | Preguntas más frecuentes | Lista de miembros | Calendario | Búsqueda | Puestos de hoy | Marcar Foros Como Leídos |
| Programación de scripts de shell y Plantear preguntas sobre KSH, CSH, SH, BASH, PERL, PHP, SED, AWK y otros scripts de shell y lenguajes de script de shell aquí. |
Más UNIX y Linux Foro Temas usted puede encontrar útiles
|
||||
| Hilo | Hilo para principiantes | Foro | Respuestas | Último mensaje |
| descomprimir archivos gzip especialmente entre los archivos de datos normal | thepurple | Programación de scripts de shell y | 4 | 11-30-2007 11:17 AM |
| gzip todos los archivos en un directorio | er_ashu | UNIX for Dummies Preguntas y Respuestas | 2 | 11-06-2007 09:05 AM |
| Necesidad de grandes archivos gzip | LordJezo | UNIX for Dummies Preguntas y Respuestas | 2 | 05-02-2005 05:18 PM |
| gzip, varios archivos | smbodnar | UNIX for Dummies Preguntas y Respuestas | 2 | 11-11-2002 04:29 PM |
| Dos los archivos creados por cada uno? | Atama | UNIX for Dummies Preguntas y Respuestas | 1 | 04-12-2002 05:44 PM |
![]() |
|
|
Linkback vínculo | Herramientas de hilo | Buscar en este Hilo | Tasa de Hilo | Modos de visualización |
|
|
|
||||
|
Gzip archivos que se crean
Hola. Tengo una consulta de secuencias de comandos que estoy Sacado en la que espero que usted puede ayudar con. Básicamente, he ksh un script que llama a un proceso para crear n número de archivos binarios. Estos archivos tienen un tamaño máximo de 1Gb. El proceso puede escribir n número de archivos a la vez (en paralelo), basado en el parámetro paralellisation en cuenta en la secuencia de comandos en el inicio. Normalmente se espera que para este proceso y, a continuación, para completar todos los archivos gzip individual (*. dmp gzip por ejemplo). Sin embargo, en algunos sistemas no tenemos suficiente espacio en disco que esperar hasta que todos los archivos de 1Gb se han producido. Tengo algo de código previamente escrito gzip para los archivos en paralelo (véase más adelante), sin embargo, tiene la necesidad de gzip en paralelo, mientras que el primer proceso se ejecuta. Tengo que tener cuidado de no intentar ningún archivo gzip está escrito (hasta n paralelo desde el mando), por lo que algún tipo de bucle será necesario. Y quiero mantener la opción del paralelo gzip si es posible. Código:
...
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
¿Puede alguien ayudarme a escribir código para esta utilizando herramientas estándar de Solaris 8/9/10 utilizando el korn shell. Perl comandos debería ser posible (vers 5.6.1 instalado). Muchas gracias y Saludos, Stephen. |
|
||||
|
Gracias cfajohnson. Voy a tratar de incorporar sus recomendaciones.
Sin embargo, para mi problema real, el oráculo de exportación de servicios públicos (el proceso que crea los archivos binarios) creará un archivo y luego rellenar con los datos hasta que llegue a 1Gb de tamaño, entonces se va a crear un nuevo archivo. Si usamos paralelización, creará n número de archivos (uno para cada proceso paralelo) y llenarlos. El final de los archivos binarios creados podría y probablemente sería la menos 1Gb. Mi pensamiento fue llamar a la función gzip antes de la exportación de servicios públicos y, a continuación, tienen que esperar a gzip para los archivos, es decir, sólo los archivos gzip si hay más de la serie paralelo n. Por lo tanto, si paralelamente se estableció a 4, sólo el 5 º archivo gzip. Pensando que a través, me resulta difícil de determinar que el archivo gzip programa gzip como podemos no sólo los archivos zip de 1Gb de tamaño, ya que podría terminar siendo escrito en el archivo, etc ¿Puedo usar algo como fusor para determinar si la herramienta de exportación ha terminado con el archivo? tal vez alguna forma de recorrer gzip que espera para el fusor para regresar no pid de un archivo de exportación y, a continuación, cremalleras que? He examinado a la exportación y puede ver que cuando la utilidad se terminó de escribir el archivo ya no se bloquea por lo que este podría ser factible. Me gustaría conocer sus ideas. Saludos cordiales. |
|
||||
|
Cita:
pero entiendo lo que quieres decir.He hecho un poco de juego y consideró que el programa de exportación va a crear un archivo de 4k inicialmente, y luego dejar de usar mientras se acumula una lista de objetos a la exportación. A continuación, devuelve un bloqueo sobre el archivo y el archivo se llena hasta el 1 GB de tamaño. He modificado mi código para utilizar un fusor y del test para comprobar que el archivo más grande que se 4k y no se estaba utilizado por cualquier usuario. Me parece que si yo uso el paralelismo de la exportación el programa creará n número de archivos y, a continuación, llenar ellos, puede empezar con los archivos 1,2,3 y 4, sino 1,3, y 4 de repente llegar a 1Gb por lo que crea 5,6,7 para continuar el paralelo tareas. archivo 2 todavía no está completa (por la razón que sea). Archivos de 1,3, y 4 están ahora no utilizada, pero la gzip_func no parece querer gzip los archivos hasta el archivo 2 es también no utilizados - que a menudo puede que no sea hasta el final de la exportación. ¿Puedes por favor lea el código de abajo y ver si puede detectar un error manifiesto? Quiero que el código para realizar el gzipping cuando los 2 se pasan las pruebas, si es posible sólo 1 archivo gzip o hasta n hilos. Alguna idea? Código:
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
|
![]() |
| Marcadores |
| Herramientas de hilo | Buscar en este Hilo |
| Modos de visualización | Vota a este hilo |
|
|