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. >> >> >> >