copy_only_missing? - Copie de /A para /C apenas caminhos ausentes em /B e /C - maneira concisa

copy_only_missing? - Copie de /A para /C apenas caminhos ausentes em /B e /C - maneira concisa

Eu gostaria de copiar de/Apara/Cfaltam apenas caminhos/Be/C. (Por favor, suponha que esses sejam caminhos e também possam representar locais remotos, por exemplo, montados via sshfs)

Eu me pergunto...Existe uma maneira mais concisa do que escrever um loop, iterar no sistema de arquivos e fazer a verificação arquivo por arquivo?

Exemplo de conteúdo de diretórios em á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: copiar de/Apara/Cúnico caminho 4abc/rty:

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

Para ilustrar exemplos práticos de/A,/B,/C, levando a tal cenário:

  • você faz backup, copia de algum/fonte(/A) para alguns/destino(/B) e alguns caminhos não foram copiados. Então você quer ter uma cópia dos que faltam de qualquer maneira. Então você encontra/outro_destino(/C) que pode aceitá-los e você deseja copiar apenas os que faltam. Aqui estão alguns exemplos de limitações por que copiar de/Apara/Bpode falhar: o disco ficou cheio; limitação do sistema de arquivos de/B(como comprimento do nome do arquivo), embora não esteja presente em/Csistema de arquivo; etc.

Responder1

Uma solução é fazer ummontagem sindicalde B e C com C como ramo de gravação. Então o problema se reduz a copiar de A para B+C apenas os arquivos que faltam em B+C, o que pode ser feito com

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

Para a montagem sindical, uma possibilidade éfusível unionfs.

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

Ou sindicato:

mount -t unionfs -o dirs=/C=rw:/B=ro unionfs /B+C 

informação relacionada