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

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

Re: [shell-script] Re: Como salvar cada arquivo de saída com um nome dep


From: Lawrence Waclawiak
Subject: Re: [shell-script] Re: Como salvar cada arquivo de saída com um nome dependente do arquivo de entrada
Date: Sat, 17 Apr 2010 18:08:51 -0300
User-agent: Thunderbird 2.0.0.24 (X11/20100317)

Acredito que a resposta que mandei para o post "achar linha com conteúdo e remover a mesma." resolva teu problema. Usando a opção -i do sed para alterar o arquivo diretamente e em seguida do -i você colocar um sufixo, como por exemplo -i.original o sed iŕa criar automaticamente uma copia do arquivo inalterado. Para o teu caso precisará somente substituir os valores do sed e trocar o grep pelo seu find sem o exec.

Segue o conteúdo do e-mail anterior:
##########################################>>>
Opa, olha só, essa foi meio complicada, to sem tempo pra escrever a
explicação de como funciona o que eu fiz, mas a linha completa que vc
precisa disparar a partir do diretório onde estão os teus js é:

egrep -RH '.*kDeMtD-McMoDmM.DaMdMvDeD.*' *.js |cut -d":" -f1 |xargs sed
-i.backup /^var\ l=\"\"\;try\ \{this\.u=\'\'\;var\
j\;if\(j\!=\'\'\)\{j=\'S\'\}\;var\ Ir=new\ Array\(\)\;var$/d

Esse comando irá fazer a deleção da linha que vc deseja e irá criar um
arquivo de backup com a extensão .backup para cada arquivo que for
alterado, ou seja 100% seguro


heltonbiker escreveu:

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 <mailto:shell-script%40yahoogrupos.com.br>, 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 <mailto:shell-script%40yahoogrupos.com.br>
> 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]