rsync-como atualização de arquivo morto

1

Ao atualizar um backup usando rsync --include-from=files --exclude-deleted , você pode receber feedback como:

Added file: new.file
Added file: other.file
Deleted file: deleted.file
etc.

É possível conseguir o mesmo com uma ferramenta de arquivamento padrão do UNIX (zip, tar, etc.), por exemplo. novos arquivos são adicionados ao arquivo e os arquivos excluídos são removidos?

Por exemplo, zip -ru@ out < files atualiza um arquivo com base em uma lista de inclusão, mas os arquivos excluídos não são excluídos. Então você fica com muitos restos de lixo no arquivo.

É claro, você pode deletar o arquivo e recriar tudo, mas você tem milhares de linhas de saída que dizem que todos os arquivos foram adicionados, então você não obtém nenhuma saída "delta", por assim dizer.

(Uma pergunta secundária é como você pode incluir arquivos baseados em curingas no arquivo de inclusão, mas isso pode ser adequado para uma pergunta separada.)

    
por forthrin 07.02.2018 / 15:25

1 resposta

1

Você pode usar a opção --filesync do zip.

Na página do manual zip (1) :

-FS

--filesync Synchronize the contents of an archive with the files on the OS. Normally when an archive is updated, new files are added and changed files are updated but files that no longer exist on the OS are not deleted from the archive. This option enables a new mode that checks entries in the archive against the file system. If the file time and file size of the entry matches that of the OS file, the entry is copied from the old archive instead of being read from the file system and compressed. If the OS file has changed, the entry is read and compressed as usual. If the entry in the archive does not match a file on the OS, the entry is deleted. Enabling this option should create archives that are the same as new archives, but since existing entries are copied instead of compressed, updating an existing archive with -FS can be much faster than creating a new archive. Also consider using -u for updating an archive. For this option to work, the archive should be updated from the same directory it was created in so the relative paths match. If few files are being copied from the old archive, it may be faster to create a new archive instead. Note that the timezone environment variable TZ should be set according to the local timezone in order for this option to work correctly. A change in timezone since the original archive was created could result in no times matching and recompression of all files.

This option deletes files from the archive. If you need to preserve the original archive, make a copy of the archive first or use the --out option to output the updated archive to a new file. Even though it may be slower, creating a new archive with a new archive name is safer, avoids mismatches between archive and OS paths, and is preferred.

Exemplo:

user@host:~/$ mkdir compressme; echo "Lorem Ipsum" >compressme/file1; echo "Lorem Ipsum" >compressme/file2; echo "Lorem Ipsum" >compressme/file3
user@host:~/$ zip -r --filesync all.zip compressme
  adding: compressme/ (stored 0%)
  adding: compressme/file2 (stored 0%)
  adding: compressme/file1 (stored 0%)
  adding: compressme/file3 (stored 0%)
user@host:~/$ rm compressme/file2
user@host:~/$ zip -r --filesync all.zip compressme
updating: compressme/ (stored 0%)
deleting: compressme/file2
    
por 08.02.2018 / 09:30

Tags