Como diferenciar nomes de arquivos em dois diretórios (sem gravar em arquivos intermediários)?


31

Estou tentando fazer algo ao longo das linhas de:

diff `ls -1a ./dir1` `ls -1a ./dir2`

Mas isso não funciona por razões óbvias. Existe uma maneira melhor de conseguir isso (em 1 linha) do que isso?

ls -1a ./dir1 > lsdir1
ls -1a ./dir2 > lsdir2
diff lsdir1 lsdir2

obrigado

Respostas:



10
diff -rq dir1 dir2

usando a opção -r, percorra árvores de diretório inteiras, verificando recursivamente as diferenças entre subdiretórios e arquivos que ocorrem em pontos comparáveis ​​em cada árvore. O truque é usar a opção -q para suprimir comparações linha a linha


3
@festo : You wree missing the poitn of this question, I don't actually want to diff the contents of the files, I want to diff the output of the ls commands
bguiz

+1, na verdade, obtive a mesma saída com uma ressalva, diff -rq relatou um arquivo vinculado como 'Nenhum arquivo ou diretório'. Portanto, mais um para uso correto e francamente mais simples. (mesmo que a resposta do IVA seja uma melhor 'oportunidade de aprendizado' para substituição de processos (> _ <)
xtian 18/10/2013

1
Isso é muito mais lento que diferenciar os nomes dos arquivos: a totalidade de cada arquivo deve ser lida e comparada.
Zaz

@ Josh é claro, porque ele faz de forma recursiva ....
Braiam

1
@ Braiam: Mesmo que você diferencie recursivamente os nomes dos arquivos (usando rsynccom a --dry-runopção, por exemplo), ainda assim seria muito mais rápido que diff -r.
Zaz
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.