[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [shell-script] Como salvar cada arquivo de saída com um nome depende
From: |
Marcio Gil |
Subject: |
RE: [shell-script] Como salvar cada arquivo de saída com um nome dependente do arquivo de entrada |
Date: |
Sat, 17 Apr 2010 18:38:03 -0300 |
for f in $(find ./ -name '*.ply') do
cp $f ${f%.*}.txt
sed ... ${f%.*}.txt
grep ... ${f%.*}.txt
# ou:
g=${f%.*}.txt
cp $f $g.txt
sed ... $g.txt
grep ... $g.txt
done
Para entender o que isso faz:
$ f=xxx.yyy
$ echo $f ${f%.*}.txt
xxx.yyy xxx.txt
$ g=xxx.yyy.zzz
$ echo $g ${g%.*}.txt ${g%%.*}.txt
xxx.yyy.zzz xxx.yyy.txt xxx.txt
> -----Original Message-----
> From: Helton Moraes
>
> 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
>