Script de busca [RESOLVIDO]

1. Script de busca [RESOLVIDO]

Leandro Rodrigues Melgaço dos santos
T800

(usa Ubuntu)

Enviado em 17/01/2013 - 23:03h

Ola

Sou novo aqui então me desculpem se eu fazer besteira.
Estou tentando fazer um script que busca uns 11 arquivos em um diretório e me retornar se ele existente ou não, mas não estou conseguindo, so consigo fazer com que ele me de a resposta se existe:

#! /bin/bash

cd /fs1/integra/

echo " "
echo "....Matriz 001..."
echo " "

test -e me000"$(date +%d%m%y)" && echo "me000"$(date +%d%m%y)" ok"
test -e pa028"$(date +%d%m%y)" && echo "pa028"$(date +%d%m%y)" ok"
test -e pc028001"$(date +%d%m%y)" && echo "pc028001"$(date +%d%m%y)" ok"
test -e pd028001"$(date +%d%m%y)" && echo "pd028001"$(date +%d%m%y)" ok"
test -e ba028001"$(date +%d%m%y)" && echo "ba028001"$(date +%d%m%y)" ok"
test -e cs"$(date +%d%m%y)" && echo "cs"$(date +%d%m%y)" ok"
test -e ms001"$(date +%d%m%y)" && echo "ms001"$(date +%d%m%y)" ok"
test -e it028001"$(date +%d%m%y)" && echo "it028001"$(date +%d%m%y)" ok"
test -e fn"$(date +%d%m%y)" && echo "fn"$(date +%d%m%y)" ok"
test -e cm028001"$(date +%d%m%y)" && echo "cm028001"$(date +%d%m%y)" ok"
test -e pf000"$(date +%d%m%y)" && echo "pf000"$(date +%d%m%y)" ok"



  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 18/01/2013 - 08:58h

E aí T800, beleza?

Cara, uma opção simples mantendo o que você já fez, é usar o operador lógico || (ou) no final das linhas de comando:

test -e me000"$(date +%d%m%y)" && echo "me000"$(date +%d%m%y)" OK" || echo "me000"$(date +%d%m%y)" Faltando"

O funcionamento é o seguinte:
test -e me000"$(date +%d%m%y)" && echo "me000"$(date +%d%m%y)" OK" || echo "me000"$(date +%d%m%y)" Faltando"
Se o primeiro comando (test) for verdadeiro, execute o próximo (echo). Se o comando anterior (echo) for falso, rode o próximo (o último echo).

Entenda verdadeiro e falso, como uma saída satisfatória ou não.

Desculpa se não consegui ser claro. Se tiver dúvidas, leia sobre operadores lógicos em shell script.

Faça o teste aí e diz se era isso que você queria. Se tiver curiosidade, dá uma pesquisada em como fazer isso usando o find, como sugerido pelos colegas.
Abraço.

3. Re: Script de busca [RESOLVIDO]

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 17/01/2013 - 23:25h

T800 escreveu:

Ola

Sou novo aqui então me desculpem se eu fazer besteira.
Estou tentando fazer um script que busca uns 11 arquivos em um diretório e me retornar se ele existente ou não, mas não estou conseguindo, so consigo fazer com que ele me de a resposta se existe:

#! /bin/bash

cd /fs1/integra/

echo " "
echo "....Matriz 001..."
echo " "

test -e me000"$(date +%d%m%y)" && echo "me000"$(date +%d%m%y)" ok"
test -e pa028"$(date +%d%m%y)" && echo "pa028"$(date +%d%m%y)" ok"
test -e pc028001"$(date +%d%m%y)" && echo "pc028001"$(date +%d%m%y)" ok"
test -e pd028001"$(date +%d%m%y)" && echo "pd028001"$(date +%d%m%y)" ok"
test -e ba028001"$(date +%d%m%y)" && echo "ba028001"$(date +%d%m%y)" ok"
test -e cs"$(date +%d%m%y)" && echo "cs"$(date +%d%m%y)" ok"
test -e ms001"$(date +%d%m%y)" && echo "ms001"$(date +%d%m%y)" ok"
test -e it028001"$(date +%d%m%y)" && echo "it028001"$(date +%d%m%y)" ok"
test -e fn"$(date +%d%m%y)" && echo "fn"$(date +%d%m%y)" ok"
test -e cm028001"$(date +%d%m%y)" && echo "cm028001"$(date +%d%m%y)" ok"
test -e pf000"$(date +%d%m%y)" && echo "pf000"$(date +%d%m%y)" ok"


Usa o find. Ele serve pra isso mesmo que você quer (e muito mais coisa).


4. Re: Script de busca [RESOLVIDO]

Daniel Lara Souza
danniel-lara

(usa Fedora)

Enviado em 18/01/2013 - 00:11h

de uma lida no comando find

$ man find

espero que ajude


5. Re: Script de busca [RESOLVIDO]

Leandro Rodrigues Melgaço dos santos
T800

(usa Ubuntu)

Enviado em 18/01/2013 - 00:58h

quando eu uso esse script e ele acha o arquivo ele me retorna na tela o nome do arquivo e um OK.

exemplo:

test -e me000"$(date +%d%m%y)" && echo "me000"$(date +%d%m%y)" OK"

se ele localizar o arquivo me volta :

me000170113 OK

eu estou querendo que quando não for encontrado o arquivo volte:

me000170113 Faltando

não consegui fazer isso com o find.

alguém tem mais alguma sugestão.


6. Re: Script de busca [RESOLVIDO]

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 18/01/2013 - 01:04h

T800 escreveu:

quando eu uso esse script e ele acha o arquivo ele me retorna na tela o nome do arquivo e um OK.

exemplo:

test -e me000"$(date +%d%m%y)" && echo "me000"$(date +%d%m%y)" OK"

se ele localizar o arquivo me volta :

me000170113 OK

eu estou querendo que quando não for encontrado o arquivo volte:

me000170113 Faltando

não consegui fazer isso com o find.

alguém tem mais alguma sugestão.


Ensinando a pensar: use o find para achar o arquivo, e use um loop if-fi para exibir a mensagem caso o arquivo não seja achado.
Dá pra fazer isso até só com o if-fi, se você usar o espaço entre as têmporas só um pouquinho você visualiza como.


7. Re: Script de busca [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 18/01/2013 - 10:33h

O pmartelotta deu a dica correta.

Não existe razão para usar o find no seu caso. Você não está varrendo uma hierarquia de diretórios em busca de arquivos que não sabe bem onde estão, mas verificando a existência de arquivos com nomes fixos em locais conhecidos. Além do mais, o find, como o próprio nome diz, reporta o que foi encontrado, não aquilo que não foi. Como você precisa também da última informação, teria necessariamente mais trabalho para fazer com find do que sem ele.

Contudo, eu sugiro uma melhoria adicional ao que o pmartelotta já lhe disse: como a data presente no sufixo dos nomes dos arquivos provavelmente vai ser a mesma para todos eles, obtenha seu valor apenas uma vez, no início do programa, e guarde numa variável, e depois substitua o valor dessa variável nos nomes dos arquivos, pois toda vez que você faz $(date +%d%m%y) o que acontece é que o shell chama o programa externo date e captura a saída do comando por meio de um pipe. Então, se você tiver dez arquivos e, para cada um deles, testar se existe ou não e imprimir a mensagem correspondente, teria de executar 20 (ou 30, dependendo de como fizer) vezes o mesmo comando externo para obter o mesmo valor.

Para lhe dar uma ideia da minha sugestão, compare o seu script com o seguinte bloco.

hoje="$(date +%Y%m%d)"
for prefixo in access_log error_log ssl_access_log ssl_error_log; do
arq="${prefixo}-${hoje}"
echo -n "O arquivo $arq "
[[ -e "$arq" ]] && echo existe. || echo "nao existe."
done



8. Re: Script de busca [RESOLVIDO]

Leandro Rodrigues Melgaço dos santos
T800

(usa Ubuntu)

Enviado em 19/01/2013 - 03:16h

Boa Noite

Valeu ai paulo1205 e pmartelotta fiz o script aqui com as suas dias e fico ok

valeu






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts