listar arquivos e comparar [RESOLVIDO]

1. listar arquivos e comparar [RESOLVIDO]

jorge
katzer

(usa Ubuntu)

Enviado em 13/03/2012 - 16:44h

Desejo listar os arquivos de um diretório para depois comparar.

(vou ter sempre apenas dois arquivos para comaparar e no formato datahora+ip.txt, Ex: 13032012153012_10.24.208.155.txt)

não sei guardar o nome dos dois em variaveis para depois fazer um diff -y e diff -q

for arquivo in $(ls -1 | egrep '*10.24.208.*.txt')
do
guardar nome do arquivo um e dois
done

diferentes=$(diff -q $arquivoum $arquivonovodois | egrep 'diferentes' | awk '{print $7}')

if [ $diferentes == "diferentes" ] 2> /dev/null; then
#se diferentes gero relatorio de diferenças com o diff -y
diff -y $arquivoum $arquivonovodois > relatorio.txt
else
#se não forem diferentes removerei o arquivo um
rm $arquivoum
fi

minha dificuldade está em guardar os dois nomes ao varrer o diretorio.



  


2. Re: listar arquivos e comparar [RESOLVIDO]

Adriano Moreira da Silva
adri3d

(usa Arch Linux)

Enviado em 13/03/2012 - 17:41h

se entendi bem user um loop dentro de outro.

for arquivoum in $(ls -1 | egrep '*10.24.208.*.txt')
do
for arquivonovodois in $(ls -1 | egrep '*10.24.208.*.txt')
do

if [ $arquivoum == $arquivonovodois ]; then
echo "pula $arquivoum"
else
#faz o que tem que fazer
diferentes=$(diff -q $arquivoum $arquivonovodois | egrep 'diferentes' | awk '{print $7}')
...
fi

done
done



mais uma coisa
na parte
diff -y $arquivoum $arquivonovodois > relatorio.txt

o certo é
diff -y $arquivoum $arquivonovodois >> relatorio.txt

para adicionar o log no linal do arquivo sem apagar o conteudo existente


3. Re: listar arquivos e comparar [RESOLVIDO]

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 14/03/2012 - 13:10h

Se você usar o bash ... pode usar o read direto:






#/bin/bash
read arquivoum arquivonovodois <<< `ls | egrep '*10.24.208.*.txt'`
diff -q $arquivoum $arquivonovodois 1>>/dev/null 2>>/dev/null
if [ "$?" -eq 0 ]; then
rm $arquivoum
else
diff -y $arquivoum $arquivonovodois > relatorio.txt
fi




4. ajuste final

jorge
katzer

(usa Ubuntu)

Enviado em 15/03/2012 - 16:34h

Abaixo o exemplo de diretorio:

13032012105428.10.24.208.131.txt
13032012110951.10.24.208.130.txt
13032012111000.10.24.208.130.txt
13032012111008.10.24.208.140.txt
13032012112057.10.24.208.138.txt
13032012112435.10.24.208.138.txt
13032012115009.10.24.208.70.txt
13032012115237.10.24.208.70.txt
14032012085852.10.24.208.169.txt
14032012151957.10.24.208.169.txt
14032012151959.10.24.208.167.txt
15032012141956.10.24.208.177.txt
15032012141957.10.24.208.177.txt
15032012151956.10.24.208.170.txt
.....

um shell script fica "monitorando" o diretório constantemente, quando chegar um arquivo com ip já existente no diretorio ele deve fazer uma comparação de arquivos e gerar relatório

desejo comparar só os arquivos com ips iguais fiz assim


#capturo a quantidade de arquivos do diretorio de ip que nunca vai estar vazio
i=$(ls /diretorio_ips | cut -d. -f6 | uniq -c | awk '{print$1}')


while [ $i > 0 ]
do
for arquivoum in $(ls | cut -d. -f5,6 | uniq -d)
do
read arquivoum arquivodois <<< `ls | egrep "$arquivoum"`
diff -q $arquivoum $arquivodois 1>>/dev/null 2>>/dev/null
if [ "$?" -eq 0 ]; then
rm $arquivoum
else
diff -y $arquivoum $arquivonovodois > relatorio.txt
fi
done
done

OBS:tem um problema, parece que não entra no for, creio que minha idéia de rodar sem interrupção não deva ser assim
outro problema é com ips ex: 170 e 70, o comando "ls | cut -d. -f5,6 | uniq -d" lista apenas os ips duplicados, neste meu exemplo o ip 170 deveria ficar de fora na linha "read arquivoum arquivodois <<< `ls | egrep "$arquivoum"`", ou seja o comando ls | egrep "$arquivoum" lista também o ip 170 e como só tem um arquivo com ip 170 não preciso comparar


5. pequeno erro

jorge
katzer

(usa Ubuntu)

Enviado em 15/03/2012 - 16:52h

a linha diff -y $arquivoum $arquivonovodois > relatorio.txt deve ter o nome $arquivodois e não $arquivonovodois.


6. detalhe do uniq

jorge
katzer

(usa Ubuntu)

Enviado em 15/03/2012 - 17:06h

verifiquei que se os arquivos com ip iguais estão em linhas diferentes o comando ls | cut -d. -f5,6 | uniq -d não lista

vou ter que melhorar isso. Peço desculpas por não resolver estes pequenos detalhes antes de postar algo. agradeço desde á aos que já me auxiliaram.

creio que preciso ainda usar o comando sort para ordenar antes de usar o uniq


7. Re: listar arquivos e comparar [RESOLVIDO]

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 15/03/2012 - 18:13h

ls | cut -d. -f5,6 | sort | uniq -d

ou use o parâmetro -u no comando sort para fazer a mesma coisa:

ls | cut -d. -f5,6 | sort -u


8. Re: listar arquivos e comparar [RESOLVIDO]

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 15/03/2012 - 18:23h

Tenta assim







#/bin/bash

while true
do
ls | cut -d\. -f2- | sort | uniq -c | awk ' $1 > 1 { print $2 }' | while read ip_duplicado
do
read arquivoum arquivodois <<< `ls | egrep "$ip_duplicado"`
diff -q $arquivoum $arquivodois 1>>/dev/null 2>>/dev/null
if [ "$?" -eq 0 ]; then
rm $arquivoum
else
diff -y $arquivoum $arquivonovodois > relatorio.txt
fi
done
done


9. listar arquivos e comparar

jorge
katzer

(usa Ubuntu)

Enviado em 19/03/2012 - 10:30h

Obrigado a todos pelo apoio. Problema resolvido.


10. Apresentar a solução adotada.

Professor Martins
professormartins

(usa Debian)

Enviado em 27/03/2013 - 11:18h

Bom dia!

Poderia postar a solução adotada para o grupo.

Grato
Martins







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts