Fazendo:
diff -r -X <ignore-list> <src-dir> <dest-dir>
parece não fazer diff
entradas de ignorar <ignore-list>
se forem do formulário <dir>/<file>
.
Entradas do formulário <file
>, no entanto, são consideradas. Esse é um problema, pois eu posso ter vários arquivos nomeados <file>
em subdiretórios diferentes, alguns dos quais não quero que sejam ignorados.
Também não parece haver muita informação sobre a sintaxe de padrão na página de manual diff
. Pelo que sei, é apenas o nome base de um arquivo que é considerado pelo diff (veja http://forums.gentoo.org/viewtopic-t-889788-start-0.html se você estiver interessado).
diff
's--exclude
opção é tão merda ...Respostas:
Os diretórios de listagem devem funcionar; por exemplo, aqui está o que eu usei em um script (assumindo o gnu diff),
... que ignora o conteúdo de
.svn
e.git
dirs, mas também arquivos individuais chamados*.zip
/*.gz
/ etc.Editar: para filtrar caminhos do formulário,
dir_a/file1
mas aindadiff
arquivos com o mesmo nome de base, comodir_b/file1
oudir_a/b/file1
, uma lista de arquivosdiff
a ser gerada (por exemplo, usandofind
) e o arquivo a ser comparado derivado desses caminhos; por exemplo, dadovocê gera a lista de arquivos para comparar, excluindo, por exemplo,
*/a/2.txt
mas ainda comparando outros arquivos nomeados2.txt
. Apenas "encontre" todos os arquivos, excetoONE/a/2.txt
(um regexp também pode ser usado aqui, como.*/a/2.txt
)que na verdade ignora
ONE/a/2.txt
(eTWO/a/2.txt
), mas ainda compara os outros arquivos chamados2.txt
:Editar: Ou, mais divertido
find
(diversão adicional deixada como exercício para o leitor), selecione os arquivos ou diretórios a serem excluídos e depoisdiff
todo o resto:O exemplo acima exclui o arquivo específico "{top} /a/2.txt", qualquer diretório chamado "b" e todo o resto é diferente. (Em vez de simples "
-name b
", você também pode usar "-regex '.*/b'
" - observe, não há "/" à direita).fonte
exclude
padrões são comparados com o nome base dos arquivos (conforme gnu.org/software/diffutils/manual/html_node/… ); caminhos não funcionarão (como emfoo/bar.txt
). Para fazer isso, você provavelmente precisará executarfind
para gerar a lista de nomes de arquivos e derivar o caminho para o arquivo comparar.diff
, em vez de apenas usandobasename
find
, se a entradadiff
contiver um diretório, ela analisará e comparará os arquivos dentro desse diretório e alguns desses arquivos precisarão ser ignorados ... de volta à estaca 1.Como tive o mesmo problema, criei um patch para
diff
. O patch ainda não foi aceito, mas você pode criar sua própria versãodiff
com o patch ou instalar no Arch Linux com um pacote AUR .Aqui está o
diff
patch.fonte
Para excluir o diretório
directory/sub-directory
, eu usoNo entanto, embora deva funcionar para uma única exclusão, não deve ser possível para uma longa lista de ignorados como você possui.
fonte
fonte