Eu tenho dois diretórios com a mesma lista de arquivos. Eu preciso comparar todos os arquivos presentes nos dois diretórios usando o diff
comando Existe uma opção simples de linha de comando para fazê-lo ou preciso escrever um script de shell para obter a listagem de arquivos e iterá-los?
303
diff
comando baixando os utilitários GNU para Win32 .-b
ignora as alterações de espaço em branco e-u
fornece 3 linhas de buffer.diff -rub folder1/ folder2/
-bur
que seria fácil lembrar se você vivesse em um clima frio.Se você estiver interessado apenas em ver os arquivos que diferem, poderá usar:
A opção "q" mostrará apenas os arquivos que diferem, mas não o conteúdo, e "classificar" organizará a saída em ordem alfabética.
fonte
diff
em cada par de arquivos diferentes. A abordagem de alguém seria totalmente diferente se apenas um ou dois arquivos diferissem versus se dezenas de arquivos fossem diferentes. Eu poderia me perder na saída dediff
dezenas de arquivos de uma só vez!-x PATTERN
no comando para excluir determinados subdiretórios. Por exemplo,diff -qr repo1 repo2 -x ".git"
comparará dois diretórios (repo1 e repo2), mas excluirá os arquivos na pasta .git dos respectivos diretórios.Diff tem uma opção
-r
que se destina a fazer exatamente isso.diff -r dir1 dir2
fonte
diff
além de comparar dois arquivos, ele pode, usando a-r
opção, percorrer árvores de diretórios inteiras, verificando recursivamente as diferenças entre subdiretórios e arquivos que ocorrem em pontos comparáveis em cada árvore.fonte
Se for GNU diff, você poderá apontá-lo para os dois diretórios e usar a opção -r.
Caso contrário, tente usar
NB Como apontado por Dennis na seção de comentários, você realmente não precisa fazer a substituição de comando no ls. Faço isso há tanto tempo que praticamente o faço no piloto automático e substituindo o comando necessário para obter minha lista de arquivos para comparação.
Também esqueci de adicionar que eu faço '\ ls' para desativar temporariamente meu apelido de ls no GNU ls, para que eu perca as informações de formatação de cores da lista retornada pelo GNU ls.
fonte
ls
:for i in ./dir1/*
Aqui está um script para mostrar as diferenças entre os arquivos em duas pastas. Funciona recursivamente. Alterar dir1 e dir2.
fonte
Se você especificamente não deseja comparar o conteúdo dos arquivos e apenas verificar qual deles não está presente nos dois diretórios, você pode comparar as listas de arquivos geradas por outro comando.
-printf '%P\n'
dizfind
para não prefixar os caminhos de saída com o diretório raiz.Também adicionei
sort
para garantir que a ordem dos arquivos será a mesma nas duas chamadas defind
.O
grep
final remove informações sobre linhas de entrada idênticas.fonte
Tente o seguinte:
fonte