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 - clemis...@gmail.com
> - 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<marciom...@bol.com.br>  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.
>>
>>
>>
>

Responder a