rsync com remover linhas extras no destino

0

Em primeiro lugar, detalho detalhadamente a estrutura do meu diretório.

src
   1
     1_1.txt
        test_line1
     1_2.txt
        test_line1
   2
     2_1.txt
        test_line1
     2_2.txt
        test_line1

Eu sincronizei esse diretório src com o diretório dst . Portanto, agora o diretório dst é igual ao diretório src usando o seguinte comando rsync .

rsync -av src/* dst/

Bem. Se eu adicionar uma linha a qualquer arquivo existente no diretório src , o mesmo comando copiará as alterações nesse diretório dst .

Agora adiciono uma linha de texto extra no diretório 1_2.txt at dst . Nesse caso, o diretório src e dst não é o mesmo.

Se eu executar o comando rsync acima, pensei em remover essa linha extra desse arquivo no diretório dst . Mas isso não aconteceu.

  1. O que devo fazer para manter os arquivos iguais ao diretório src com o diretório dst ?

  2. Quando um novo diretório / arquivo adicionado no diretório dst manualmente, ele deve solicitar a remoção desse diretório / arquivo ou não quando eu executar o comando rsync . Como posso fazer isso?

por Smith Dwayne 20.09.2018 / 07:20

1 resposta

3

Eu não consigo reproduzir o mesmo comportamento que você está vendo:

$ tree
.
|-- d
|   '-- file
'-- s
    '-- file

2 directories, 2 files
$ cat s/file
hello
$ rsync -av s/ d
sending incremental file list

sent 63 bytes  received 12 bytes  150.00 bytes/sec
total size is 6  speedup is 0.08

Nenhum dado foi transferido, os dois arquivos já eram os mesmos.

$ echo world >>d/file
$ cat d/file
hello
world
$ rsync -av s/ d
sending incremental file list
file

sent 116 bytes  received 35 bytes  302.00 bytes/sec
total size is 6  speedup is 0.04
$ cat d/file
hello

Isso mostra que as linhas adicionadas aos arquivos no diretório de destino serão removidas pela repetição de rsync -a .

Para excluir arquivos no destino que não estão disponíveis no diretório de origem, use --delete :

$ tree
.
|-- d
|   |-- extra_file
|   '-- file
'-- s
    '-- file

2 directories, 3 files
$ rsync -av --delete s/ d
sending incremental file list
deleting extra_file
./

sent 66 bytes  received 29 bytes  190.00 bytes/sec
total size is 6  speedup is 0.06
$ tree
.
|-- d
|   '-- file
'-- s
    '-- file

2 directories, 2 files

O utilitário rsync não oferece suporte nativo a solicitações interativas para confirmação antes de excluir arquivos no destino. No entanto, você pode executar com --dry-run primeiro para ver o que aconteceria se a cópia fosse real.

Observe também que, se você usar rsync -av s/* d em vez de rsync -av s/ d , não copiará nenhum arquivo ou diretório oculto no diretório de origem. Isso ocorre porque o padrão * glob por padrão não se expande para nomes de arquivos ocultos. Arquivos ocultos nos subdiretórios do diretório de origem ainda seriam copiados.

    
por 20.09.2018 / 08:39

Tags