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

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

Mover e Renomear - continuação


From: Helton Moraes
Subject: Mover e Renomear - continuação
Date: Tue, 30 Mar 2010 11:49:20 -0300

Caros colegas

Acabei esbarrando em um comando que fez o serviço de forma perfeita:

mcp '~/pacientes/*/* */white.bmp' '~/saida/octave/#1-#2-#3-white.bmp'
mcp '~/pacientes/*/* */fringes.bmp' '~/saida/octave/#1-#2-#3-fringes.bmp'

Como não sei se esse comando 'viola' os termos desta lista (usar outras
linguagens), então aproveito ainda para fazer uma pergunta mais genérica, em
termos de boa-prática em shell:

"qual é a conduta recomendável, em termos de pipe/redirecionamento, para
localizar um arquivo em determinada estrutura de diretórios/filenames,
passá-lo por diversos comandos, e depois salvá-lo (na verdade uma cópia) em
outro local, com outro nome, já devidamente processado?"

Esta não é uma pergunta para ser respondida de forma pronta e completa, acho
eu (tomara que possa ser!), mas ao ser confrontado com meu problema atual,
me parecem ser possíveis diversas alternativas, e vejo que algumas
geralmente são desestimuladas por alguns, preferidas por outros...

Vejamos, TAREFA:
- localizar arquivos de imagem dentro de uma árvore, com determinado nome;
- passá-los por batch processing no imagemagick (rotacionar, ajustar
histograma, recortar, etc);
- renomeá-los de acordo com a estrutura de diretório de onde provieram;
- salvá-los, processados e renomeados, em uma saída;
- opcionalmente, "limpar" os rastros deixados pelos passos anteriores do
script (pastas e arquivos criados).

Abordagens possíveis:
- usar muitos loops aninhados;
- usar find -exec;
- usar find + piping;
- usar find >argumentos.txt, e apontar o argumentos.txt como lista de
argumentos para outros comandos (talvez sendo antes processado pelo sed);
- declarar variáveis no início e durante o script, e usar essas variáveis em
substituições no meio dos comandos;
- etc, etc, etc.

Uma questão de boa-prática que me 'aflige' em especial é se seria 'errado',
por exemplo:
primeiro mover tudos os arquivos com um comando, depois processar todos os
arquivos com outro, depois renomear com outro, tipo, um comando por linha,
que iria ficar gravando e regravando um monte de arquivos em um monte de
pastas, e ao final poderia (ou não) limpar seus rastros;

OU

Se é considerado universalmente melhor, sempre que possível e até a morte,
dar um monte de pipes, processando as informações dentro do comando, sem
gravar arquivo nenhum exceto a saída final.

Já imagino que a preferência e experiência pessoal é o que vai decidir se é
melhor um ou outro, mas como estou aprendendo (sempre estamos), acho
importante se acostumar desde o início em planejar da melhor forma os
scripts, evitando vícios e ineficiências - principalmente por saber
identificá-los.

Grato pela atenção

Helton


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

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