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

[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
> 



reply via email to

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