Tuesday 31 October 2017

Unix compare two files opções binárias


Estou tentando economizar espaço ao fazer um backup mudo simplesmente despejando dados em um arquivo de texto. Meu script de backup é executado diariamente e tem a seguinte aparência: Crie um diretório com o nome da data do backup. Dump alguns dados em um nome de arquivo de texto. Se o arquivo for válido, gzip it: gzip name. Caso contrário, rm nome. Agora eu quero adicionar um passo adicional para remover um arquivo se os mesmos dados também estavam disponíveis no dia anterior (e criar link simbólico ou hardlink). No começo eu pensei em usar o nome md5sum. Mas isso não funciona porque eu também armazenar o nome do arquivo e data de criação. Gzip tem uma opção para comparar dois arquivos gzip e me diga se eles são iguais ou não Se gzip não tem essa opção, existe outra maneira de atingir o meu objetivo perguntou Feb 8 13 às 18:40 gzip - l - v gzip : Um pode combinar o CRC eo tamanho descompactado para obter uma impressão digital rápida: Para verificar se dois bytes são iguais ou não, use cmp file1 file2. Agora, um arquivo gzip tem algum cabeçalho com os dados e rodapé (CRC mais o tamanho original) anexado. A descrição do formato gzip mostra que o cabeçalho contém a hora em que o arquivo foi compactado e que o nome do arquivo é uma seqüência de caracteres nul-terminated que é anexada após o cabeçalho de 10 bytes. Assim, assumindo que o nome do arquivo é constante eo mesmo comando (nome gzip) é usado, pode-se verificar se dois arquivos são diferentes usando cmp e ignorando os primeiros bytes, incluindo o tempo: Nota. A suposição de que as mesmas opções de compactação são importantes, caso contrário, o comando sempre relatará o arquivo como diferente. Isso ocorre porque as opções de compactação são armazenadas no cabeçalho e podem afetar os dados compactados. Cmp apenas olha para bytes brutos e não interpretá-lo como gzip. Se você tiver nomes de arquivo do mesmo comprimento, então você pode tentar calcular os bytes a serem ignorados após ler o nome do arquivo. Quando os nomes de arquivos são de tamanho diferente, você pode executar cmp após ignorar bytes, como cmp lt (corte - b9-file1) lt (corte - b10-file2). Este é definitivamente o melhor caminho a percorrer, primeiro compacta dados e começa a comparar os bytes com cmp (realmente, isso é o que é feito no zcmp (zdiff) shellscript). Uma nota, não tenha medo da seguinte nota na página de manual: Quando ambos os arquivos devem ser descompactados antes da comparação, o segundo é descompactado para / tmp. Em todos os outros casos, zdiff e zcmp usam apenas um pipe. Quando você tem um Bash suficientemente novo, a compactação não usará um arquivo temporário, apenas um pipe. Ou, como a fonte zdiff diz: true, md5sum isn39t necessário comparar (a menos que você já tenha gerado) Eu só usei desde derobert usado. Zgrep é apenas um script que basicamente faz gunzip e grep (ou sed conforme o caso pode ser), então há pouca diferença lá. O script como postado é intencionalmente mostrado como uma cadeia de tubos com partes plugáveis ​​que é a diversão em fundir tudo em um único comando ndash michaeln Mar 14 13 às 20:19

No comments:

Post a Comment