shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Como salvar cada arquivo de saída com um nome dependente do arquivo


From: heltonbiker
Subject: Re: Como salvar cada arquivo de saída com um nome dependente do arquivo de entrada
Date: Sat, 17 Apr 2010 19:59:58 -0000
User-agent: eGroups-EW/0.82

Olá, Vinícius, obrigado pela resposta!

Na verdade não é isso que procuro fazer. Minha idéia não é copiar os arquivos e 
apagar os originais, mas sim criar novos arquivos baseados no processamento de 
arquivos existentes. No final, fico com os arquivos originais não-modificados, 
e com os novos arquivos, com nomes diferentes mas baseados nos nomes originais.

Por exemplo, se eu processase o arquivo muitos_dados.xml, removendo várias 
partes que não interessam usando o sed, eu salvaria um novo arquivo chamado, 
por exemplo, muitos_dados_resumido.txt.

O problema é que, como é um processamento em lote em que o primeiro comando é o 
find, eu não sei como armazenar uma variável "temporária" com o nome original 
de CADA arquivo, rodar o comando para processar o arquivo, rodar outro comando 
para gerar o novo nome, e no final de tudo isso salvar o resultado com o novo 
nome gerado.

Novamente obrigado por enquanto

Helton Moraes

--- Em address@hidden, Vinicius Xavier <vinicius_xavier@...> escreveu
>
> Helton,
>  
> O resultado que vc quer seria o abaixo?
>  
> Apagar os arquivos proucurados, e ter uma cópia dos mesmos?
>  
> ls -ltr | tail -6
> -rw-r--r-- 1 vinicius users        0 Apr 17 16:04 bun003.ply
> -rw-r--r-- 1 vinicius users        0 Apr 17 16:04 bun002.ply
> -rw-r--r-- 1 vinicius users        0 Apr 17 16:04 bun001.ply
> -rw-r--r-- 1 vinicius users        0 Apr 17 16:05 mcfly.ply
> -rw-r--r-- 1 vinicius users        0 Apr 17 16:05 starship.ply
> -rw-r--r-- 1 vinicius users        0 Apr 17 16:05 fore_aft.ply
> 
> for i in $(ls | grep ".ply") ; do mv "$i" "$i"_BKP ; done
>  
> ls -ltr | tail -6
> -rw-r--r-- 1 vinicius users        0 Apr 17 16:04 bun003.ply_BKP
> -rw-r--r-- 1 vinicius users        0 Apr 17 16:04 bun002.ply_BKP
> -rw-r--r-- 1 vinicius users        0 Apr 17 16:04 bun001.ply_BKP
> -rw-r--r-- 1 vinicius users        0 Apr 17 16:05 mcfly.ply_BKP
> -rw-r--r-- 1 vinicius users        0 Apr 17 16:05 starship.ply_BKP
> -rw-r--r-- 1 vinicius users        0 Apr 17 16:05 fore_aft.ply_BKP
> 
>  
>  
>  
> Abs,
> Vinícius Xavier
>  
> 
> --- Em sáb, 17/4/10, Helton Moraes <heltonbiker@...> escreveu:
> 
> 
> De: Helton Moraes <heltonbiker@...>
> Assunto: [shell-script] Como salvar cada arquivo de saída com um nome 
> dependente do arquivo de entrada
> Para: address@hidden
> Data: Sábado, 17 de Abril de 2010, 15:37
> 
> 
>   
> 
> 
> 
> E aí, pessoal
> 
> Tenho andado com uma dúvida que deve ser simples (mas não sei como fazer,
> hehe). Não sou da área da programação, então essas coisas são meio novidade.
> 
> Cada vez que tenho um monte de arquivos que tenho que "limpar" ou formatar
> (parsear somente as informações que me interessam, meu fluxo de trabalho é o
> seguinte:
> 
> 1) encontrar todos os arquivos que preenchem alguma condição, geralmente
> nome ou extensão, dentro de algumas pastas;
> 2) aplicar um ou mais comandos, como sed, grep, ou se forem imagens o
> imagemagick, ou outros comandos;
> 3) salvar um novo arquivo de "resultado", cujo nome dependa do arquivo de
> entrada.
> 
> Por exemplo, se tenho os arquivos
> 
> bun001.ply
> bun002.ply
> bun003.ply
> fore_aft.ply
> starship.ply
> mcfly.ply
> 
> eu poderia fazer algo do tipo $ find ./ -name '*.ply' - exec
> sed<alguma_coisa> '{}' > '{}'.txt \;
> 
> No exemplo acima, entretanto, ao menos nas minhas tentativas não muito
> insistentes, os arquivos de saída ficam literalmente {}.txt, e só o último
> é salvo porque os arquivos têm o mesmo nome e vão se sobrescrevendo.
> Isso me faz supor que o '{}' do find não "atravessa" o redirecionamento '>'.
> 
> Vi gente nos fóruns sugerindo fazer algo parecido com isso: $ find ./ -name
> '*.ply' - exec sh -c 'sed<alguma_ coisa> {} > {}.txt \;'
> 
> mas no fim das contas aí mesmo é que nada aconteceu (nada foi salvo).
> 
> Agora resolvi (ao menos para fazer de algum jeito) usar dois scripts, de
> modo que o 'find -exec' chame um script que contenha o sed, de forma que eu
> possa criar variáveis próprias para cada "rodada" desencadeada pelo find
> para tratar um único arquivo. Entretando, isso me parece bastante
> ineficiente e "errado".
> 
> Assim sendo, pergunto (desculpem as maiúsculas, só por destaque):
> 
> QUAL É A BOA PRÁTICA RECOMENDÁVEL PARA PROCESSAMENTO EM LOTE DE ARQUIVO
> USANDO O FIND, ONDE SEJA NECESSÁRIO CRIAR O NOME DE ARQUIVO DE SAÍDA COM
> BASE NO NOME DO RESPECTIVO ARQUIVO DE ENTRADA?
> 
> Vou seguir lendo aqui, quando tiver chegado a uma situação satisfatória (de
> preferência com um único script), divulgo para lista, mas agradeço qualquer
> dica e/ou ajuda.
> 
> Obrigado
> 
> Helton Moraes
> 
> [As partes desta mensagem que não continham texto foram removidas]
> 
> 
> 
> 
> 
> 
> 
> 
> 
>       
> 
> [As partes desta mensagem que não continham texto foram removidas]
>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]