Como comparar e mesclar pastas no linux?

Olá a todos!

Estou com um pequeno probleminha:
História:
Havia uma pasta em um servidor OwnCloud (rodando em um CentOs 7) em que um usuário decidiu fazer uma cópia dessa pasta. O processo não foi bem sucedido, copiando apenas alguns, outros não… O problema começa agora: Alguns novos documentos foram salvos na pasta nova, outros, na antiga. E agora precisamos colocar tudo em apenas uma única pasta, e, eliminar o documentos redundantes. Precisaria que as redundâncias fossem resolvida por apagar o documento mais novo.

Resumo:
Basicamente preciso de uma forma de excluir arquivos com o mesmo nome, e de duas pastas, fazer uma
O comando diff compara apenas o conteúdo dos documento, então não me atende.
O mv não consegue resolver o conflito de duplicidade de arquivos.

Ah, e ao todo são 197gb de documentação… então não tenho como fazer manualmente…

----FIM----

Tags: mescla, merge, arquivos duplicados

1 curtida

Para resolver este tipo de problema, eu utilizo o Freefile Sync.
É Free e tem Flatpak também.

5 curtidas

Na verdade, o diff compara arquivos entre diretórios sim.
Por exemplo, tente rodar diff ~/caminho/A/ ~/caminho/B/.


Para comparar manualmente, se houver um arquivo do diretório B/ (dir mais novo) no diretório A/ (dir mais velho), apagar do diretório B/…

dirA="$HOME/caminho/A" 
dirB="$HOME/caminho/B"

cd -- "$dirA"
for f in *
do
    diff -q "$f" "$dirB/$f" && rm -- "$dirB/$f"
done

Assim só deve sobrar arquivos em B que não estão em A, ou que são diferentes. Daí, eu mesclaria os arquivo manualmente depois de conferir…

Sugiro mover para uma pasta temp ao invés de remover para evitar perder arquivos sem conferir direito.

1 curtida

Acredito que esse é o tipo de cenário para qual o rsync foi feito. Só pelos critérios passados aqui, essa linha de comando deve atender:

# -r → entrar em diretórios
# -v → gerar relatório no terminal
# --ignore-existing → não sobrescrever arquivos
rsync -rv --ignore-existing ./fonte ./destino

É bom dar uma lida no manual do rsync se houver algum requisito adicional (como preservar symlinks, permissões, etc.).

3 curtidas

Gostei da solução
Encontrei um bash bastante interessante no github também. É permitido postar o link aqui?
E pelo que testei, é praticamente o que o diff faz, só que com uma saída mais bonitinha

2 curtidas

Testei a sua solução, e funcionou perfeitamente!

Muito obrigado pessoal!!!

Passando para incluir o link do git do MarcosBrasil, com um código muito bom também: Comaprando arquivos de 2 diretórios ( linux ) · GitHub

Pra quem usa o Plasma, tem o Krusader. Ele é parecido com o FreeFileSync mas de código aberto.

1 curtida

Este tópico foi fechado automaticamente 3 dias depois da última resposta. Novas respostas não são mais permitidas.