Gerenciando colisões de nomes de arquivos ao mesclar pastas (linux)

0

Eu precisaria de um tipo de sw de sincronização para executar a mesclagem bidirecional (recursiva) de pastas.

Digamos que eu tenha 2 pastas A e B.

A pasta A contém arquivos: A 1, 3, 5 and 7.
pasta B contém arquivos:1, 2, 3 and 6.

Após a execução da mesclagem, o resultado deve ser o seguinte:

Pasta A: 1, 1-b, 2, 3, 3-b, 5, 6, 7
Pasta B:1, 1-a, 2, 3, 3-a, 5, 6, 7


Dividindo-os separadamente:

as pastas A e B contendo: 2, 5, 6, 7
(a união OR de nomes de arquivos sem colisão: uma cópia bidirecional (da mesma classificação, nenhuma fonte em particular nem destino em particular) sem renomear;

Pasta A contendo também: 1, 1-b, 3, 3-b(versões próprias mais versões adicionadas)
Pasta B contendo também: 1, 1-a, 3, 3-a(versões próprias mais versões adicionadas)
(O traço-a ou traço-b é apenas um espaço reservado para renomeação automática para contornar a colisão de nomes, não é realmente importante. sufixo faria). Basicamente, cada pasta conteria todas as versões (sem que as mais recentes substituíssem as antigas) de todos os arquivos, independentemente de seus nomes.

Como eu pude obter esse resultado? Eu olhei para 'meld', mas não funcionou conforme o esperado (ele propôs sobrescrever arquivos existentes, incapaz de renomear), e o 'rsync' parece intrinsecamente assimétrico (oferecendo classificação mais alta à origem do que ao destino). Preciso de uma verdadeira fusão paritética ...

Agradecemos antecipadamente por qualquer ajuda. Aliás ... um SW existente dedicado seria mais apreciado do que reinventar a água quente manualmente. Mas se não existir, também seria necessário o script. TY. Gatto

GattoVizzato
fonte
Esta não é muito claro ... Vou tentar editá-lo adicionando algumas quebras de linha (apenas?), Mas se você pode esclarecer, ainda, que pode ser mais útil
Xen2050

Respostas:

0

Olhe nas infopáginas para ver claramente cp. Um comando como

cp --archive --backup --suffix="-original" A/* B

Deve copiar todos os arquivos de A para B e, se já houver arquivos (nomes de arquivos conflitantes), o arquivo de destino existente será renomeado para [name]-original(ou seja, um backup será feito primeiro).

Em seguida, execute-o novamente usando em --no-clobbervez de --backupe --suffixdeve copiar os arquivos restantes apenas em B para A

cp --archive --no-clobber --exclude='*-original' B/* A

Isso deve excluir os [name]-originalarquivos em B. Verifique se não há arquivos com esse sufixo para começar.

E adicione a -vpara ver o que está acontecendo.

[Tentei - recursivo, mas não foi o esperado]

Xen2050
fonte