Compare dois diretórios recursivamente, exceto para \ bin \ e \ obj \

1

Estou tentando usar o WinMerge para comparar dois diretórios:

C: \ Usuários ... \ Desktop \ Compare \ 35_A

C: \ Usuários ... \ Desktop \ Compare \ 35_HS

## This is a directory/file filter for WinMerge 
## This filter lets through only files ASP.NET developers care about 
name: ASP.NET Devel 
desc: Lets through only files ASP.NET developer cares about

## This is an exclusive filter 
## (it lets through only matching files) 
def: exclude 

## Filters for filenames begin with f: 
## Filters for directories begin with d: 
## (Inline comments begin with " ##" and extend to the end of the line) 

f: \.xml$ 
f: \.xlst$
f: \.xsl$
f: \.xslt$
f: \.dtd$ 
f: \.html$ 
f: \.htm$ 
f: \.css$ 
f: \.gif$ 
f: \.bmp$ 
f: \.jpg$ 
f: \.png$ 
f: \.js$ 
f: \.dll$ 
f: \.aspx$ 
f: \.asmx$ 
f: \.ascx$ 
f: \.vb$ 
f: \.resx$ 
f: \.cs$ 
f: \.js$ 
f: \.vbproj$ 
f: \.csproj$ 
f: \.sln$ 
f: \.webinfo$ 
f: \.config$ 

d: \*$ ## Subdirectories 

def: exclude
d: \bin
d: \obj

As últimas 3 linhas não fazem parte do filtro, adicionei essas como estou tentando ignorar qualquer coisa e tudo em todos os diretórios \ bin \ e \ obj \. Eu tentei os dois def: include e def: exclude , nenhum deles fornece resultados precisos.

Eu examinei a documentação de ajuda no WinMerge sobre os filtros de arquivo, mas não entendi.

    
por sab669 22.07.2015 / 16:07

3 respostas

1

Incluir e excluir referem-se ao que é mostrado na lista de arquivos e pastas após a comparação ser feita. Os filtros são incluindo e excluindo coisas da lista.

Se você usar um filtro excluir , exclui, da listagem de arquivos, tudo não listado no filtro.

Se você usar um filtro include , ele incluirá, na listagem de arquivos, tudo não listado no filtro.

No seu caso, você está usando uma exclusão, portanto, verá apenas os arquivos e pastas que você listou especificamente em seu filtro. Para bloquear as pastas bin e obj , você precisa saber os nomes de all das outras pastas que deseja ver, para que elas possam ser listadas em seu filtro.

Acho que, para o código, é mais fácil usar um filtro de inclusão. Dessa forma, posso bloquear pastas e arquivos com os quais não me importo.

Altere o primeiro def: para include e remova o segundo def . Eu acho que você só pode ter um def . Suas regras de d: seriam então

d: \bin$
d: \obj$
    
por 22.07.2015 / 16:33
1

Como outros já mencionaram, você só pode ter uma linha def: , e os filtros realmente executam a ação oposta da diretiva def: (ou seja, quando os filtros def são exclude realmente incluem arquivos).

Então, com esse conhecimento, podemos ver que a linha a seguir está incluindo todos os subdiretórios.

d: \*$ ## Subdirectories

Eu não tenho WinMerge instalado, e eu não estou familiarizado com o mecanismo RegEx nele, mas você poderia tentar usar uma pesquisa negativa para incluir todos os subdiretórios, exceto "bin" e "obj":

d: ^\((?!bin|obj)(.+)|(.+)(?<!bin|obj))$
    
por 22.07.2015 / 16:56
0

Eu tive algum sucesso limitado com a resposta do @superd, mas mais tarde descobri que isso é muito mais fácil no aparente sucessor do WinMerge, WinMerge2011.

Com o WinMerge2011, usei

xd: \bin(\.+|)$
xd: \obj\

Pode ser difícil encontrar documentação, mas eu encontrei link

File/directory filters have been enhanced in WinMerge 2011 to allow for combining both inclusion and exclusion rules. Omitting the def: label in an .flt file makes f: and d: operate as inclusion rules unless prefixed with x, in which case they operate as exclusion rules. The f: and d: labels, again optionally prefixed with x to form an exclusion rule, can also be used with wildcard filters.

O FYI WinMerge parece não estar mais sendo desenvolvido. Veja as anotações gerais no link . Faça o download do WinMerge2011 no link

    
por 01.12.2017 / 04:19

Tags