Existe uma maneira de manter um backup apenas dos arquivos modificados em um diretório (quando comparado a outro diretório)?

0

Nota: Eu sou novo no Linux, mas pesquisei brevemente o comando rsync e tenho certeza que é o que eu vai estar usando. Infelizmente, há muitas opções diferentes para esses comandos e estou um pouco confuso sobre como usá-lo para minha situação específica (descrito abaixo).

Situação: Eu tenho dois diretórios, um com um conjunto básico de arquivos que foram baixados de um repo (eu não quero modificá-los) e outro com uma cópia de trabalho do mesmo repo. O que estou procurando é um comando que compara minha cópia de trabalho do repositório ao repositório estático para ver se houve alguma alteração entre os dois. Se houver uma mudança, somente os arquivos alterados serão movidos para outro diretório (especificamente para backups). A outra restrição é que eu quero manter a estrutura de diretórios da cópia de trabalho (veja o exemplo abaixo).

Exemplo:

Static Repo:

/src
    code1.java
    code2.java
/tests
    test1.java

Repo de trabalho:

/src
    code1.java
    code2.java (modified)
/tests
    test1.java
    test2.java (added)

Diretório de backups:

/src
    code2.java
/tests
    test2.java

Originalmente, o Static Repo e Working Repo seriam os mesmos e o Backups Directory estaria vazio. Depois que eu fizer alterações no Working Repo , eu poderia executar o comando que estou procurando e o Backups Directory seria preenchido apropriadamente (com apenas os arquivos novos / modificados / diretórios).

Existe tal comando?

    
por Paul Warnick 25.01.2017 / 00:18

2 respostas

2

Não sei qual problema você está tentando resolver, mas acredito que git provavelmente poderia ser uma solução para isso. Mas vamos supor que a única opção aceitável seja algum tipo de script de backup.

O que eu usaria é o comando find para pesquisar todos os arquivos em working_repo mais recentes que o arquivo em static_repo com a hora da última modificação.

Portanto, gostaria de começar com a localização do ficheiro mais recente no repositório estático e depois use algo como:

find <working_repo> -type f -newer <latest_file_in_static_repo> -exec rsync {} <backup_dir>/{} \;

opções de find :

  • -newer <f> Encontre arquivos que foram modificados mais recentemente do que o arquivo <f> .
  • -exec <command> execute <command> em cada arquivo encontrado, onde {} é substituído pelo nome do arquivo atualmente processado.
  • -type f Encontre apenas f iles (pular diretórios, links simbólicos, soquetes, etc).

Nota : não marquei o comando acima, por isso pode ter alguns erros ou erros de digitação, mas em geral mostra a ideia.

    
por 25.01.2017 / 03:03
0

Um backup sensato mantém o histórico. E para poder lê-lo em qualquer sistema, eu visaria algo como:

20170125-230000
  /src
      code1.java (version 1)
      code2.java (version 1)
  /tests
      test1.java (version 1)

20170126-000000
  /src
      code1.java (version 1) hardlink to 20170125-230000
      code2.java (version 2)
  /tests
      test1.java (version 1) hardlink to 20170125-230000 
      test2.java (version 1)

20170126-010000
  /src
      code1.java (version 1) hardlink to 20170125-230000
      code2.java (version 2) hardlink to 20170126-000000
      code3.java (version 1)
  /tests
      test1.java (version 2)
      test3.java (version 1)

Para preservar o espaço em disco, rsync pode usar --link-dest para criar links físicos para arquivos (ou talvez até pastas) que não foram alterados. Claro, isso também implica que se algum setor no disco de backup ficar ruim, todo o histórico de algum arquivo inalterado pode ser perdido (digamos code1.java (version 1) acima, que efetivamente é armazenado apenas em disco uma vez, enquanto está em todas as pastas de backup) . Então: sempre gire os discos de backup.

Veja Time Machine no Ubuntu? para uma implementação e para ler os avisos sobre a compreensão de pastas vinculadas. Mas você provavelmente quer usar algo como rsnapshot .

(E, de fato, a resposta para o seu problema real é o Git. Mas mesmo assim você precisa fazer backups. Sempre crie backups. Sempre.)

    
por 26.01.2017 / 17:20