Posso ignorar arquivos por padrão no deja-dup (Backup)?

13

Meus backups do Déjà Dup ficaram muito grandes e notei que eles contêm um grande número de arquivos desnecessários (por exemplo *.pyc, arquivos, **__pycache__pastas e outras coisas temporárias relacionadas à construção).

Sei que posso ignorar pastas específicas, mas existe uma maneira de excluir arquivos e / ou pastas por padrões?

Eu pensei que poderia haver mais opções utilizáveis ​​através de um arquivo de configuração, mas o Déjà Dup não usa um. Então, observei a duplicidade (a CLI em que ela se baseia), mas a página de manual também não menciona um arquivo de configuração. Eu sei que a duplicidade pode ignorar arquivos e pastas com base em padrões ( --exclude, --exclude-filelist), mas não tenho idéia de como combinar isso com o Déjà Dup .

Tenho que abandonar o Déjà Dup e usar a duplicidade manualmente? Ou existe uma maneira de definir as opções necessárias, para que sejam usadas automaticamente, quando a duplicidade é usada pelo Déjà Dup ?

Brutus
fonte

Respostas:

4

Você pode editar a lista de exclusões como:

gsettings get org.gnome.DejaDup exclude-list
# remove comment to execute
# gsettings set org.gnome.DejaDup exclude-list ['path1', 'path2']

Fonte: https://answers.launchpad.net/deja-dup/+question/280954

Tentei adicionar padrões como '** /. Git' e '** / build' nessa lista, assim:

gsettings get org.gnome.DejaDup exclude-list > exclude-list
gedit exclude-list
gsettings set org.gnome.DejaDup exclude-list "`cat exclude-list`"

Mas para mim, parece que os ** não foram passados ​​para a duplicidade. Então, em vez disso, acabei fazendo seaches como

locate "/home/*/.svn"
locate "/home/*/build"

e os adicionou à lista de exclusão manualmente

Jacob Nordfalk
fonte
3

O uso de padrões ** não funciona (mais) porque o deja-dub escapa [? * Caracteres no comando duplicidade. Consulte https://git.launchpad.net/deja-dup/tree/libdeja/tools/duplicity/DuplicityJob.vala#n303 :

  string escape_duplicity_path(string path)
  {
    // Duplicity paths are actually shell globs.  So we want to escape anything
    // that might fool duplicity into thinking this isn't the real path.
    // Specifically, anything in '[?*'.  Duplicity does not have escape
    // characters, so we surround each with brackets.
    string rv;
    rv = path.replace("[", "[[]");
    rv = rv.replace("?", "[?]");
    rv = rv.replace("*", "[*]");
    return rv;
  }

  void process_include_excludes()
  {
    expand_links_in_list(ref includes, true);
    expand_links_in_list(ref excludes, false);

    // We need to make sure that the most specific includes/excludes will
    // be first in the list (duplicity uses only first matched dir).  Includes
    // will be preferred if the same dir is present in both lists.
    includes.sort((CompareFunc)cmp_prefix);
    excludes.sort((CompareFunc)cmp_prefix);

    foreach (File i in includes) {
      var excludes2 = excludes.copy();
      foreach (File e in excludes2) {
        if (e.has_prefix(i)) {
          saved_argv.append("--exclude=" + escape_duplicity_path(e.get_path()));
          excludes.remove(e);
        }
      }
      saved_argv.append("--include=" + escape_duplicity_path(i.get_path()));
      //if (!i.has_prefix(slash_home_me))
      //  needs_root = true;
    }
    foreach (File e in excludes) {
      saved_argv.append("--exclude=" + escape_duplicity_path(e.get_path()));
    }

    // TODO: Figure out a more reasonable way to order regexps and files.
    // For now, just stick regexps in the end, as they are more general.
    foreach (string r in exclude_regexps) {
      saved_argv.append("--exclude=" + r);
    }

    saved_argv.append("--exclude=**");
  }
user1008070
fonte
3
  1. instalar dconf-editor
sudo apt install dconf-editor
  1. executar dconf-editorcomo usuário normal. (não use sudo)
dconf-editor
  1. localize org -> gnome -> deja-dup -> lista de exclusão
  2. defina o valor personalizado como (substitua leo pelo seu nome de usuário)
['$TRASH', '$DOWNLOAD', '/home/leo/.anaconda', '/home/leo/**/node_modules', '/home/leo/**/__pycache__', '/home/leo/**/*.pyc']
  1. Pode ser necessário reiniciar / entrar novamente. Eu corro o Screenshot que atualiza automaticamente o valor. Não sei por que, talvez alguém possa explicar.

Imagens:

Substitua leo pelo seu nome de usuário

substitua 'leo' pelo seu nome de usuário

Deve ficar assim

LeoZ
fonte
Eu tentei isso e o ~/**/node_modulesprograma aparece na 'Pasta para ignorar', mas ainda assim eles são copiados ..., portanto, parece não funcionar ...
musicformellons
2

Eu tentei o método de Jacob Nordfalk , mas não funcionou para mim (talvez a sintaxe tenha mudado).

No entanto, consegui alterar a configuração usando dconf-editor. Você pode modificar a lista no caminho/org/gnome/deja-dup/exclude-list

jost21
fonte
1

Obtenha a lista de exclusões atual com:

$ gsettings get org.gnome.DejaDup exclude-list

que produz algo como:

['', '/home/me/delete_me', '/home/me/eclipse', '/home/me/Music', '/home/me/R', '/home/me/Videos']

Em seguida, defina sua nova lista envolvendo a saída antiga entre aspas e adicionando suas alterações:

$ gsettings set org.gnome.DejaDup exclude-list "[ '', '/home/me/delete_me', '/home/me/eclipse', '/home/me/Music', '/home/me/R', '/home/me/Videos', '/home/me/**/.git']"

e execute o get novamente para verificar suas alterações.

Paul Smith
fonte
0

Infelizmente, nem a Duplicity nem o Déjà Dup usam um arquivo de configuração :( Mas pode haver uma solução alternativa possível, o usuário @mterrymencionou o seguinte no relatório de bug vinculado acima:

se você editar o gconf da lista de exclusão e adicionar padrões como " **/parts", o padrão será passado para duplicidade e tudo funcionará conforme o esperado ... "

Agora, onde estão essas configurações do gconf armazenadas hoje em dia?

Brutus
fonte
1
org -> gnome -> deja-dupaka org.gnome.DejaDup. Mas não está funcionando para mim.
esmail
você pode editar a lista de exclusão como: gsettings get org.gnome.DejaDup excluir-lista gsettings definir org.gnome.DejaDup excluir-list [ 'Caminho1', 'path2']
Jacob Nordfalk
0

Consegui excluir com êxito usando meu include_list.txtarquivo que contém:

- /home/justin/**/.insync-trash
- /home/justin/**/__pycache__
- /home/justin/**/*.pyc
- /home/justin/**/node_modules
- /home/justin/**/Google Photos
+ /home/justin/Documents
- /home/justin/*

A /**/é importante para corresponder até qualquer profundidade diretório.

Regra 1: A ordem é importante. Primeiro seja específico primeiro e geral depois.

Regra 2: O que já foi correspondido em uma linha (incluir ou excluir) não pode ser alterado pelas correspondências subsequentes nas linhas posteriores. A documentação menciona isso; mas em inglês terrivelmente confuso. Espero que o meu seja melhor;) As linhas acima alcançam:

  • Linha 1: excluir qualquer __pycache__em qualquer profundidade.
  • Linha 2: exclui qualquer arquivo com extensão .pyc.
  • Linha 6: inclua minha Documentspasta específica e única .
  • Linha 7: excluir toda a minha outra casa pasta, como Pictures, Videos, Downloads, etc. Note-se que esta não pode parar Documentsde ser incluído como já foi correspondida em linha 6! Ordem importa!
Justin Solms
fonte
1
Eu acho que você usa seu include_list.txtarquivo chamando duplicidade diretamente da linha de comando? Você conhece alguma maneira de fazer essa lista de padrões funcionar com a GUI padrão do Ubuntu, Déjà Dup? (BTW: parece bastante confuso para me nomear um arquivo contendo de inclusão e exclusão padrões include_list.txt...)
Salim B