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