copy_only_missing? - Copiar de / A para / C apenas caminhos ausentes em / B e / C - forma concisa

1

Gostaria de copiar de / A para / C somente os caminhos ausentes em / B e / C . (Por favor, assuma que estes são caminhos, e pode representar também localizações remotas, por exemplo, montadas via sshfs )

Eu me pergunto ... Existe uma maneira mais concisa do que escrever um loop, iterar sobre o sistema de arquivos e fazer checagem, arquivo por arquivo?

Exemplo de conteúdo de diretórios de árvore / A , / B , / C :

/ A :

/A/1abc/qwe
/A/2abc/asd
/A/3abc/zxc
/A/4abc/rty

/ B :

/A/2abc/asd
/A/3abc/zxc

/ C :

/C/1abc/qwe

esperado: para copiar de / A para / C somente caminho 4abc/rty :

/A/4abc/rty -> /C/4abc/rty

Para ilustrar exemplos práticos de / A , / B , / C , o que leva a esse cenário:

  • você faz backup, copia de algum / source ( / A ) para algum / destination ( / B ) e alguns caminhos não foram copiados. Então você quer ter a cópia de qualquer um dos que faltam. Então você encontra / another_destination ( / C ) que pode aceitá-los, e você quer copiar apenas os que estão faltando. Aqui estão exemplos de limitações porque a cópia de / A para / B pode falhar: o disco ficou cheio; limitação do sistema de arquivos de / B (como nome do arquivo), embora não presente no sistema de arquivos / C
por Grzegorz Wierzowiecki 20.06.2016 / 11:43

1 resposta

1

Uma solução é criar um conjunto de união de B e C com C como o ramo de gravação. Em seguida, o problema reduz a cópia de arquivos A para B + C apenas em falta em B + C, o que pode ser feito com

rsync -a --ignore-existing /A /B+C

Para a união, uma possibilidade é unionfs-fuse .

unionfs-fuse -o cow /C=RW:/B=RO /B+C

Ou unionfs:

mount -t unionfs -o dirs=/C=rw:/B=ro unionfs /B+C 
    
por 21.06.2016 / 01:39