Eu costumo fazer rsync -n
antes de fazer um real rsync
. O problema é: como eu poderia automatizar a segunda execução para reutilizar exatamente a lista gerada --dry-run
?
Quero dizer, se eu rodar, rsync -n
então eu faço uma simulação do que rsync
faria, minha idéia seria pegar essa saída, processá-la e, de alguma forma, fazer rsync
apenas --include-from
essa saída, então a lista completa deve ser calculada apenas uma vez.
Se isso nem faz sentido, por favor, me avise.
A propósito, eu costumo usar rsync -hva --progress --stats --delete --exclude-from "$EXCLUDEFILE"
. Se você também tiver uma sugestão sobre quais opções você usaria, entre em contato. Estou tentando duplicar o conteúdo de um disco rígido externo (que contém apenas imagens, vídeos e documentos) para outro disco rígido externo.
fonte
--dry-run
comando para um arquivo (por exemplo,rsync --dry-run -avz SOURCE DEST > include.txt
), remover todas as linhas que não são arquivos / caminhos do include.txt e executarrsync --include-from include.txt
.rsync --include-from include.txt --exclude=* SOURCE DEST
. Consulte stackoverflow.com/a/19296415/1765910 para obter detalhes.rsync
, mas não sei de nada a partir de scripts shell / bash ...Respostas:
Certamente é possível usar a lista de arquivos gerada durante uma execução a seco como um arquivo de inclusão. Idealmente, no entanto, as linhas extras na parte superior e inferior da saída a seco devem ser excluídas.
Exemplo de saída:
Para remover essas linhas, canalize a
rsync
saída parahead
dentrotail
. Em seguida, salve a saída processada em um arquivo de inclusão:rsync --dry-run -avz source/ destination/ | head --lines=-3 | tail --lines=+3 > include.txt
Por fim, diga
rsync
para usar o arquivo de inclusão gerado (adicionando opções adicionais conforme desejado):rsync --include-from=include.txt --exclude=* source/ dest/
fonte
tail
/head
robusto é suficiente para garantir apenas a lista de arquivos?--delete
faz com que os arquivos excluídos dos diretórios de origem sejam excluídos dos diretórios de destino, pelo menos no computador em que eu tentei. Você pode deixar de fora a partetail
/head
.rsync
interpreta cada linha no arquivo de inclusão como um nome de arquivo e simplesmente ignora arquivos inexistentes; portanto, nada acontecerá se você mantiver as linhas extras (a menos que possua arquivos com o nome "enviando lista de arquivos incrementais" etc.). Nesse caso, esses arquivos também serão copiados).