![]() |
|
|
google unix.com
|
|||||||
| Fóruns | Registar | Fórum Regimento | Ligações | Álbuns | FAQ | Lista deputados | Calendário | Pesquisa | Today's Posts | Mark Forums Read |
| Programação Shell Script e Post perguntas sobre ksh, CSH, SH, BASH, Perl, PHP, SED, Awk e outros scripts shell e shell scripts línguas aqui. |
Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
|
||||
| Fio | Thread Starter | Fórum | Respostas | Última postagem |
| descompactar arquivos gzip especial entre os arquivos de dados normal | thepurple | Programação Shell Script e | 4 | 11-30-2007 11:17 |
| gzip todos os arquivos em um diretório | er_ashu | UNIX para Dummies Perguntas & Respostas | 2 | 11-06-2007 09:05 |
| Necessidade de arquivos gzip LARGE | LordJezo | UNIX para Dummies Perguntas & Respostas | 2 | 05-02-2005 05:18 |
| gzip, múltiplos arquivos | smbodnar | UNIX para Dummies Perguntas & Respostas | 2 | 11-11-2002 04:29 |
| Dois arquivos criados para cada um? | Atama | UNIX para Dummies Perguntas & Respostas | 1 | 04-12-2002 05:44 |
![]() |
|
|
Linkback | Thread Tools | Pesquisar este Thread | Rate Thread | Display Modes |
|
|
|
||||
|
Gzip arquivos que são criados
Olá. Eu tenho um script que estou stumped consulta sobre a qual eu espero que possa ajudar a resolver. Basicamente, eu tenho um ksh script que chama um processo para criar n número de arquivos binários. Estes ficheiros têm um tamanho máximo de 1Gb. O processo pode escrever n número de arquivos de uma vez (operação paralela), com base nas paralellisation parâmetro alimentado no script de início. Normalmente teríamos de esperar para completar este processo e, em seguida, todos os arquivos gzip individualmente (gzip *. dmp, por exemplo). No entanto, em alguns sistemas que não têm espaço em disco suficiente para esperar até que todos os arquivos tenham sido produzidos 1Gb. Eu tenho escrito previamente alguns códigos para os arquivos gzip em paralelo (ver abaixo), porém, agora eu preciso gzip-los em paralelo, enquanto o primeiro processo é executado. Eu preciso ter cuidado para não tentar qualquer arquivos gzip actualmente a ser escrito (até n paralelo a partir do comando), assim uma espécie de looping será necessária. E eu quero manter a opção de gzip paralelo, se possível. 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
Alguém pode me ajudar a escrever algum código para este usando ferramentas padrão solaris 8/9/10 utilizando o Korn shell. Perl comandos deve ser possível (vers 5.6.1 instalado). Muitos agradecimentos e Best Regards, Stephen. |
|
||||
|
Graças cfajohnson. Vou tentar incorporar as suas recomendações.
No entanto, para o meu verdadeiro problema, o oráculo exportação utilidade (o processo que gera os arquivos binários) irá criar um arquivo e então preenchê-lo com dados até que ele chegue 1Gb de tamanho, então ele irá criar um novo arquivo. Se usamos parallelisation, irá criar n número de processos (um para cada processo paralelo) e preenchê-los. O último binário arquivos criados e poderia provavelmente ser inferior a 1Gb. O meu pensamento era o de chamar o gzip funções antes da exportação utilidade e, em seguida, tê-lo esperar por arquivos para gzip, ou seja, apenas arquivos gzip se houver mais do que o número paralelo n. Portanto, se paralelo foi definido como 4, apenas a 5. Gzip arquivo. Pensar-la através, eu achar que é difícil identificar qual o ficheiro que o programa deve gzip gzip como não podemos simplesmente zip de 1Gb em tamanho que ele pode ainda ser escrito acabamento para o arquivo, etc Posso usar algo como fusor para identificar se a exportação ferramenta tem acabado com o arquivo? talvez algum tipo de looping gzip que espera o fusor para retornar nenhum pid para um arquivo de exportação e, em seguida, Fecha-lo? Eu olhei para uma exportação e podemos ver que, quando o utilitário está acabado de escrever o arquivo já não é tão fechaduras isso poderia ser viável. Eu gostaria de receber as suas ideias. Atenciosamente. |
|
||||
|
Citação:
mas entendo o que você quer dizer.Eu fiz alguns jogando e constatou que a exportação programa irá criar um arquivo de 4k inicialmente e, em seguida, pare de utilizá-lo enquanto ele acumula-se uma lista de objetos para exportação. Em seguida, retorna um bloqueio sobre o arquivo e encha o arquivo até o tamanho 1gb. Eu o meu código modificado para usar uma du fusor e teste para verificar se o arquivo foi maior do que 4k e não estava a ser usado por qualquer usuário. Acho que se eu usar o paralelismo sobre a exportação o programa irá criar n número de ficheiros e, em seguida, preenchê-las, pode começar com arquivos 1,2,3 e 4, mas 1,3, e 4 repente chegar 1Gb por isso cria 5,6,7 para continuar o paralelo tarefas. dossier 2 ainda não está completo (por qualquer motivo). Arquivos 1,3, e 4, que são agora utilizadas, mas a gzip_func não parecem querer gzip os arquivos até arquivo 2 está também não utilizados - que muitas vezes pode não ser até o final da exportação. Pode você queira dar uma olhada no código abaixo e veja se você pode detectar um erro óbvio? Eu quero o código para realmente começar gzipping quando o 2 testes são aprovadas, se pode apenas 1 arquivo gzip ou até n threads. Qualquer idéias? 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 |
| Thread Tools | Pesquisar este Thread |
| Display Modes | Esta taxa Thread |
|
|