Como listar arquivos que foram modificados após uma determinada data e que não estão em uma lista de pastas

0

Meu objetivo é criar um backup tar.gz incremental para uma pasta chamada /data.

Para fazer isso, quero recuperar a lista de arquivos que foram modificados após o último backup. Este momento é armazenado em um arquivo chamado lastran.txt.

Eu uso o seguinte comando para obter esta lista:

find /data -newer lastran.txt -not -type d -print 0

Eu canalizo os resultados deste comando para um xargs -0 tarcomando.

Meu problema é que os resultados do findcomando contêm um conjunto de arquivos que estão em uma ou mais pastas que não quero adicionar ao arquivo morto.

Eu tentei o --except-fromparâmetro de tarcom um arquivo que chamei folder-exclusion.lstque contém uma lista de pastas como:

/data/backups
/data/cloud
/data/system

Mas isso não parece estar funcionando.

Jefferson B. Elias
fonte
Eu não usei esta opção no tar, mas parece que seu arquivo de exclusão deve ser uma lista de padrões , de modo que cada linha deve ter /*no final, por exemplo /data/backups/*, etc.
AFH

Respostas:

0

Várias opções, escolha uma:

  1. Verifique rdiff-backup, você pode estar reinventando a roda.

  2. Diga findpara excluir alguns padrões em primeiro lugar. Use -wholenameassim:

    find /data -newer lastran.txt -not -type d -not -wholename "/data/backups/*" -not -wholename "/data/cloud/*" -not -wholename "/data/system/*" -print 0
  3. Pegue seu original finde filtre sua saída:

    find /data -newer lastran.txt -not -type d -print 0 | grep -Ezv "^/data/backups/|^/data/cloud/|^/data/system/"
  4. Corrija seu folder-exclusion.lst. Minha experiência com taré limitada e não consigo encontrar nada sobre a --except-fromopção. Se você tem certeza de que é a opção certa, o comentário da AFH pode estar correto:

    parece que seu arquivo de exclusão deve ser uma lista de padrões , de modo que cada linha tenha /*no final, por exemplo /data/backups/*, etc.

Kamil Maciorowski
fonte