Sincronize duas pastas locais no bash


23

Eu tenho uma grande pasta "X" no meu diretório pessoal e uma cópia desatualizada em uma unidade flash - Y. Qual é o análogo rm Y; cp X Y, mas sem substituir os arquivos já existentes?

Respostas:


26

Há muito mais propriedades para rsync do que a resposta anterior menciona. Você deve examiná-los você mesmo:

man rsync

Mas, para o seu problema, sugiro:

rsync -a --delete X Y

Dessa forma, o receptor (Y) excluirá qualquer arquivo que não esteja no X. Certifique-se de fazer o procedimento corretamente. Usado incorretamente como root, pode facilmente matar o seu sistema ... :)


1
Concorde que você deve ter muito cuidado com isso. Tente adicionar --dry-run ao comando para ver o que acontecerá sem realmente fazer alterações. Se ela vai bem fazer o mesmo comando sem --dry-run
squarecandy

Uma pequena correção que me levou um tempo para chegar: rsync -a --delete X/ Y. Essa pequena barra após o X fez com que funcionasse como pretendido para mim, de modo que poderia ajudar outros também. Explicado aqui: abbeyworkshop.com/howto/unix/nix_rsync/index.html
Shovalt

15

Dê uma olhada no rsync (1) . Ele pretende fazer exatamente o que você deseja.

rsync -av X Y

Ele suporta cópia remota, através de seu próprio protocolo ou ssh, mas também pode ser usado localmente.

Dependendo do comportamento exato desejado, você também pode passar a --updateopção. Isso instruirá o rsync a não substituir arquivos que já existem no destino e são mais novos que os da fonte.

Se você deseja remover arquivos extras (ou seja, arquivos que existem em Y, mas não em X), você pode adicionar a --deleteopção.


Mas ele não removerá arquivos do que os removidos no X, enquanto o removerá rm Y; cp X Y.

Para remover os arquivos removidos do X, use a opção --delete.
csonuryilmaz

0

Tente usar o rsnyc, possivelmente com o seguinte comando:

rsync -avzu /home/x /y

-u = não sobrescreva um arquivo no destino, se ele for modificado


Mas ele não removerá arquivos do que os removidos no X, enquanto o removerá rm Y; cp X Y.

0

Eu acho que algumas das funcionalidades que você está procurando na opção -u (atualização) realmente existem nesta opção:

"--ignore-existente" - pula a atualização de arquivos existentes no receptor

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.