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

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

Re: [shell-script] Percorrendo uma lista com duplas de arquivos


From: Marcio Gil
Subject: Re: [shell-script] Percorrendo uma lista com duplas de arquivos
Date: Wed, 11 Aug 2010 17:27:53 -0300
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.9.2.8) Gecko/20100802 Thunderbird/3.1.2

Em 11/8/2010 10:26, Julio C. Neves escreveu:
Fala Marcio,
será que o xargs com -n2 ou -L2 não resolveria o seu problema sem loop?


Funciona de certa forma:

$ xargs -n2 diff -q <iguais.lst
Os arquivos Projeto1/subdir1/arquivo2.cpp e Projeto2/subdir1/arquivo2.cpp são diferentes Os arquivos Projeto1/subdir3/arquivo4.cpp e Projeto2/subdir3/arquivo4.cpp são diferentes

$ xargs -L1 diff -q <iguais.lst
Os arquivos Projeto1/subdir1/arquivo2.cpp e Projeto2/subdir1/arquivo2.cpp são diferentes Os arquivos Projeto1/subdir3/arquivo4.cpp e Projeto2/subdir3/arquivo4.cpp são diferentes

Aproveito para tirar algumas dúvidas a respeito do 'xargs'.

O questão é, e se eu quiser executar alguma ação quando os arquivos
forem diferentes, como jogar a linha para um arquivo. Poderia remover
com 'sed' as palavras do 'diff', só não ficaria portável. Mas tem como
executar algo mais complexo com o 'xargs', com dois comandos? Exemplo:

$ xargs -I{} -n2 "diff -q {} || echo {} >dif.lst" <iguais.lst

Mas não funciona pois o {} não funciona com -n2 ou -L1 e o xargs pensa
que "diff -q {} || echo {} >dif.lst" é todo um nome de arquivo.

Outra coisa que costumo fazer com frequência:

$ xargs -n2 vimdiff <iguais.lst

Utilizando o laço 'for', se eu quiser interromper no meio eu teclo
"CTRL+Z", depois digito "fg" e quando saio do editor o laço é
interrompido. Com xargs eu preciso dar um 'kill' pois não funciona,
existe uma maneira melhor?


Tem um exemplo muito parecido com o que vc quer na minha página (
www.julioneves.com), no link "Tira Gosto"

Abração,
Julio
Cursos de Shell e Zenity em 2 fins de semana?
- SE turma de Shell/Zenity em 13/09 - address@hidden
- SP turma de Shell em 14/08 - www.4Linux.com.br
<http://www.4linux.com.br/>
- Turmas fechadas em outras cidades ligue (21)8112-9988.

--- @ WiseStamp
Signature<http://my.wisestamp.com/link?u=63n3xfgzns9kh5v7&site=www.wisestamp.com/email-install>.
Get it 
now<http://my.wisestamp.com/link?u=63n3xfgzns9kh5v7&site=www.wisestamp.com/email-install>


Em 11 de agosto de 2010 09:54, Marcio Gil<address@hidden>  escreveu:



A uns tempos atrás eu postei aqui no grupo o seguinte script:

http://bash.pastebin.com/jjfUPuAp

Hoje eu estava tentando comparar dois projetos para ver quais
arquivos existem com o mesmo nome que diferem no conteúdo, então eu
rodei esta linha:

$redund -n Projeto1/ Projeto2/>iguais.lst

e obetive um resultado como esse:

Projeto1/arquivo1.cpp Projeto2/arquivo1.cpp
Projeto1/subdir1/arquivo2.cpp Projeto2/subdir1/arquivo2.cpp
Projeto1/subdir2/arquivo3.cpp Projeto2/subdir2/arquivo3.cpp
Projeto1/subdir3/arquivo4.cpp Projeto2/subdir3/arquivo4.cpp

Ou seja, dois nomes de arquivo por linha. Agora eu quero percorrer
esta lista para, por exemplo, comparar os arquivos que diverem.
Tentei desta forma:

IFS=$'\n'
for f in `<iguais.lst` ; do diff -q $f ; done

Mas não dá certo pois ele não interpreta o $f como dois arquivos,
mas como um.

Também poderia gerar uma lista de arquivos idênticos (mesmo conteúdo)
com "redund -i" e subtrair o segundo conjunto do primeiro, mas ainda
assim eu precisaria percorrer o resultado com descrevi.

Obrigado.

Marcio Gil.






reply via email to

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