Find com variável e problemas

1. Find com variável e problemas

Daniel Cardoso Alves
dcardosoa

(usa Slackware)

Enviado em 02/03/2016 - 10:18h

Olá pessoal,

Estou fazendo um script mas estou com um problema na execução. Veja o script abaixo:


#/bin/bash

MYVAR='\( -name "*2015-03-03-Ter*" -or -name "*2015-03-04-Ter*" -or -name "*2015-03-05-Ter*" \) -and -name "*tar.bz2"';

find $DIR_BACKUP -type f -not $MYVAR -exec ls -lha {} \;


Ao executar este comando estou tendo o erro:

find: caminhos devem preceder a expressão: \(
Utilização: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [caminho...] [expressão]


Se eu colocar o comando completo dentro do arquivo substituindo as variáveis funciona normal, e executando o comando na linha de comando também funciona normal.
Acredito que o problema esteja relacionado com a variável MYVAR.

Alguém ai já teve este problema e conseguiu solucionar?
Obrigado!


  


2. Re: Find com variável e problemas

Perfil removido
removido

(usa Nenhuma)

Enviado em 02/03/2016 - 19:03h

Estou quebrando aqui a cabeça com testes, pois é um problema interessante sobre programação de scripts.
Ainda não consegui coisa alguma.

Este tipo de coisas costumo ter sorte pesquisando no Stack Overflow.

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



3. Re: Find com variável e problemas

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 03/03/2016 - 08:24h

Funcionou aqui, não precisa dos "\", ficando:


MYVAR='( -name "*2015-03-03-Ter*" -or -name "*2015-03-04-Ter*" -or -name "*2015-03-05-Ter*" ) -and -name "*tar.bz2"';
....



4. Re: Find com variável e problemas

Daniel Cardoso Alves
dcardosoa

(usa Slackware)

Enviado em 03/03/2016 - 11:56h

rai3mb escreveu:

Funcionou aqui, não precisa dos "\", ficando:


MYVAR='( -name "*2015-03-03-Ter*" -or -name "*2015-03-04-Ter*" -or -name "*2015-03-05-Ter*" ) -and -name "*tar.bz2"';
....


Bom dia,

Testando aqui não dá erro, mas a consulta fica errada. Não traz os resultados esperados.


5. Re: Find com variável e problemas

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 03/03/2016 - 13:47h

[quote]dcardosoa escreveu:
Olá pessoal,
Estou fazendo um script mas estou com um problema na execução. Veja o script abaixo:


#/bin/bash
MYVAR='\( -name "*2015-03-03-Ter*" -or -name "*2015-03-04-Ter*" -or -name "*2015-03-05-Ter*" \) -and -name "*tar.bz2"';
find $DIR_BACKUP -type f -not $MYVAR -exec ls -lha {} \;

--------------------------------------------
Boa tarde dcardodoa.

Tenho 02 opções, são elas:

OPÇãO-01:
Definindo 04 VARIÁVEIS

#/bin/bash
MYVAR01="*2015-03-03-Ter*"
MYVAR02="*2015-03-04-Ter*"
MYVAR02="*2015-03-05-Ter*"
MYVAR04="*tar.bz2"
find $DIR_BACKUP -type f -not ( -name "$MYVAR01" -or -name "$MYVAR02" -or -name "$MYVAR03" ) -and -name "$MYVAR04"; -exec ls -lha {} \;


OPÇãO-02:
"Otimizando" as VAR'S
OBS: Juntei MYVAR01, MYVAR02 e MYVAR03, do exemplo acima em uma só.

#!/bin/bash
MYVAR01="*2015-03-0[3-5]-Ter*"
MYVAR02="*tar.bz2"
find $DIR_BACKUP -type f -not -name "$MYVAR01" -and -name "$MYVAR02"; -exec ls -lha {} \;


Se resolver, marque como resolvido, por favor.
Gostando da resposta, marque-a como MELHOR, dessa forma, ganho uns pontinhos, o que incentiva a continuar ajudando . . . :)

att.:
marcelo oliver


6. Re: Find com variável e problemas

Daniel Cardoso Alves
dcardosoa

(usa Slackware)

Enviado em 03/03/2016 - 14:59h

msoliver,

Coloquei um exemplo com uma variável fixa mas ela é gerada automaticamente pelo meu sistema.

Veja como eu gero hj:



NAME_FILES="-not \( ";
for FILE_BKP in `cat $CONTROL_BKP`;do #imprime as tabelas de cada BD
if [ "$NAME_FILES" = "-not \\( " ];then
NAME_FILES=${NAME_FILES}' -name "*'$(echo $FILE_BKP | sed "s/'//g")'*"';
else
NAME_FILES=${NAME_FILES}' -or -name "*'$(echo $FILE_BKP | sed "s/'//g")'*"';
fi
done
NAME_FILES="${NAME_FILES} \) -and -name \"*tar.bz2\"";

find $DIR_BACKUP -type f $NAME_FILES -exec ls -lha {} \;




7. Re: Find com variável e problemas

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 04/03/2016 - 11:55h

dcardosoa escreveu:

msoliver,
Coloquei um exemplo com uma variável fixa mas ela é gerada automaticamente pelo meu sistema.
Veja como eu gero hj:


NAME_FILES="-not \( ";
for FILE_BKP in `cat $CONTROL_BKP`;do #imprime as tabelas de cada BD
if [ "$NAME_FILES" = "-not \\( " ];then
NAME_FILES=${NAME_FILES}' -name "*'$(echo $FILE_BKP | sed "s/'//g")'*"';
else
NAME_FILES=${NAME_FILES}' -or -name "*'$(echo $FILE_BKP | sed "s/'//g")'*"';
fi
done
NAME_FILES="${NAME_FILES} \) -and -name \"*tar.bz2\"";
find $DIR_BACKUP -type f $NAME_FILES -exec ls -lha {} \;

----------------------------------------------------------------------------------
Bom dia dcardosoa.
Pelo que entendi, o conteúdo das variáveis que eu defini, como:
MYVAR01="*2015-03-03-Ter*"
MYVAR02="*2015-03-04-Ter*"
MYVAR02="*2015-03-05-Ter*"
São provenientes do arquivo da variável $CONTROL_BKP, é isso?
São sempre 03?

Outra coisa, sei que está fora do escopo, mas....

No seu script postado acima, você define a variável:
NAME_FILES="-not \( ";
Depois faz um teste condicional . . .
Se a VAR NAME_FILES, foi definida com o VALOR "-not \( "
Qual o motivo do teste condicional e do else?

PS.:
Só estou querendo ententer/ajudar. :)

att.:
marcelo





8. Re: Find com variável e problemas

Daniel Cardoso Alves
dcardosoa

(usa Slackware)

Enviado em 04/03/2016 - 12:04h

msoliver escreveu:
Bom dia dcardosoa.
Pelo que entendi, o conteúdo das variáveis que eu defini, como:
MYVAR01="*2015-03-03-Ter*"
MYVAR02="*2015-03-04-Ter*"
MYVAR02="*2015-03-05-Ter*"
São provenientes do arquivo da variável $CONTROL_BKP, é isso?
São sempre 03?

Outra coisa, sei que está fora do escopo, mas....

No seu script postado acima, você define a variável:
NAME_FILES="-not \( ";
Depois faz um teste condicional . . .
Se a VAR NAME_FILES, foi definida com o VALOR "-not \( "
Qual o motivo do teste condicional e do else?

PS.:
Só estou querendo ententer/ajudar. :)

att.:
marcelo




Marcelo,

São proveniente sim do $CONTROL_BKP. Mas isto pode variar conforme minha configuração. Pode ser qualquer valor. Veja abaixo um exemplo do arquivo:


cat etc/old_backup.list
'2016-03-03-Ter'
'2016-03-04-Ter'
'2016-03-05-Ter



O IF dentro do loop é apenas um controle para gerar a expressão no formato correto, poderia ter tirado do loop, mas preferi deixá-la





9. Re: Find com variável e problemas

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 04/03/2016 - 13:12h

dcardosoa escreveu:

msoliver escreveu:
Bom dia dcardosoa.
Pelo que entendi, o conteúdo das variáveis que eu defini, como:
MYVAR01="*2015-03-03-Ter*"
MYVAR02="*2015-03-04-Ter*"
MYVAR02="*2015-03-05-Ter*"
São provenientes do arquivo da variável $CONTROL_BKP, é isso?
São sempre 03?

Outra coisa, sei que está fora do escopo, mas....

No seu script postado acima, você define a variável:
NAME_FILES="-not \( ";
Depois faz um teste condicional . . .
Se a VAR NAME_FILES, foi definida com o VALOR "-not \( "
Qual o motivo do teste condicional e do else?

PS.:
Só estou querendo ententer/ajudar. :)

att.:
marcelo




Marcelo,

São proveniente sim do $CONTROL_BKP. Mas isto pode variar conforme minha configuração. Pode ser qualquer valor. Veja abaixo um exemplo do arquivo:


cat etc/old_backup.list
'2016-03-03-Ter'
'2016-03-04-Ter'
'2016-03-05-Ter

O IF dentro do loop é apenas um controle para gerar a expressão no formato correto, poderia ter tirado do loop, mas preferi deixá-la

-----------------------------------
Bom, já que a expressão esta causando problemas.
A sugestão é gerar as variáveis somente com o nome do arquivo e montar o comando, tipo:
find $DIR_BACKUP -type f -not ( -name "$MYVAR01" -or -name "$MYVAR02" -or -name "$MYVAR03" ) -and -name "*tar.bz2"'; -exec ls -lha {} \;
Onde:

MYVAR01="2016-03-03-Ter"
MYVAR01="2016-03-04-Ter"
MYVAR01="2016-03-05-Ter"


att.:
marcelo







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts