Como recursivamente difiro dois directores e ignoro as primeiras n linhas de cada arquivo

0

Esta questão é semelhante a Como diferenciar apenas a primeira linha de dois arquivos? , mas recursivamente. Eu gostaria de diferenciar dois diretórios, mas:

  • diff apenas as primeiras N linhas de cada arquivo nos dois diretórios
  • diff tudo, exceto as primeiras N linhas de cada arquivo nos dois diretórios
por lanoxx 04.10.2015 / 18:13

2 respostas

1

Minha primeira sugestão para você é usar Meld . Ele funciona a partir da linha de comando também.

Ele tem os seguintes recursos que podem lhe interessar:

  • Compare dois ou três diretórios, arquivo por arquivo, mostrando arquivos novos, ausentes e alterados.
  • Use a filtragem de texto regex integrada para ignorar as diferenças não interessantes.

A única coisa que você precisa fazer é descobrir os padrões de regex corretos que podem ser usados para ignorar os dados sem importância (dependendo da sintaxe de seus metadados que você deseja ignorar).

    
por 05.10.2015 / 11:38
0

Esses dois loops usam diff -qr para fazer um diff inicial, principalmente para obter os nomes dos arquivos facilmente, faça um diff individual no encontrou um par de arquivos. sed é usado para limpar as primeiras N linhas ou para manter apenas as primeiras N linhas. Primeiro para limpar N linhas:

N=2
diff -qr dir1 dir2 |
grep '^Files.*differ' |
while read x a x b x
do  diff --label "$a" --label "$b" -u <(sed "1,${N}s/.*//" <"$a") <(sed "1,${N}s/.*//" <"$b")
done

E isso para manter N:

diff -qr dir1 dir2 |
grep '^Files.*differ' |
while read x a x b x
do  diff --label "$a" --label "$b" -u <(sed -n "1,${N}p" <"$a") <(sed -n "1,${N}p" <"$b")
done

Isto não assume espaços / abas em nomes de arquivos.

    
por 05.10.2015 / 19:53