Tenho duas cópias de uma pasta
src/
dest/
Quero mesclá-los, fazendo o seguinte:
Se um arquivo estiver apenas dentro src
, quero que ele seja movido paradest
Se um arquivo estiver apenas dentro dest
, quero que seja ignorado o IE deixado em paz.
Se um arquivo estiver nos dois e tiver conteúdo idêntico (IE, mesmo tamanho e data), exclua desrc
Se um arquivo estiver nos dois e não tiver conteúdo idêntico, deixe para trás src
para que eu possa mesclá-los manualmente.
Apenas um número muito pequeno de arquivos (entre 0% e 5% do total de arquivos) deve estar nesta última categoria, mas não sei como separar o em ambos e o mesmo de ambos, mas diferente.
Eu tentei descobrir como fazer isso, rsync
mas sem sucesso até agora.
for file in `find src/ -type f`; do diff $file `echo $file | sed 's/src/dest/'` && rm $file || echo $file; done
(você pode pular o|| echo $file
se quiser, ele é incluído para ser completo)\?*[
, inicial-
). Você precisa usar aspas duplas em torno das substituições de variáveis , passar--
para os utilitários antes dos nomes dos arquivos, usar emfind … -exec …
vez de analisar a saída defind
. Com umrm
comando na mistura, esta é uma receita para o desastre.uníssono é a ferramenta que você está procurando. Tente unison-gtk se você preferir um gui. Mas não acho que ele excluirá arquivos semelhantes: o unison tenta ter os dois diretórios idênticos. No entanto, ele irá facilmente 1) identificar quais arquivos devem ser copiados; 2) quais precisam de mesclagem manual.
fonte
O script a seguir deve fazer as coisas razoavelmente. Ele move os arquivos da origem para o destino, nunca substituindo um arquivo e criando diretórios conforme necessário. Os arquivos de origem que possuem um arquivo diferente correspondente no destino são deixados em paz, assim como os arquivos que não são arquivos ou diretórios regulares (por exemplo, links simbólicos). Os arquivos restantes na fonte são aqueles para os quais há um conflito. Cuidado, eu não testei nada.
Outra abordagem seria fazer uma união montar um diretório acima do outro, por exemplo, com funionfs ou unionfs-fuse .
fonte