Verifique se há redundância antes de baixar qualquer arquivo

1

Existe uma maneira de verificar se você já fez o download de um arquivo anteriormente ou não antes de baixá-lo.

Eu sei -

  • wget pode fazer isso, somente se o nome do arquivo do arquivo que está tentando ser buscado for igual ao comparado para o arquivo já recuperado antes.
  • Você pode aplicar soma de verificação ou md5hash para localizar & amp; remover arquivos redundantes, mas isso só pode ser feito DEPOIS de você ter baixado o arquivo.

Por favor, sugira uma maneira de verificar se um arquivo é o mesmo em termos de conteúdo antes de baixá-lo TOTALMENTE novamente (independente do nome do arquivo que será salvo).

Para torná-lo mais preciso : Estou interessado em baixar APENAS arquivos mp3 , mas de fontes diferentes como Jamendo, Soundcloud etc., que podem ter o mesmo conteúdo (música), mas estará tendo nomes de arquivos diferentes.

    
por Rishav Ambasta 03.04.2015 / 10:53

2 respostas

2

Leia os primeiros 500 bytes do primeiro arquivo:

head -c 500 file1.mp3 > fragment1

Use curl -r 0-499 -o fragment2 http://... para recuperar os primeiros 500 bytes do segundo arquivo. Então, faça diff fragment1 fragment2 para ver se eles são iguais.

curl é uma ferramenta como wget apenas com mais opções. O sinalizador -r permite especificar um intervalo, o que resultará em um download parcial. wget tem uma opção de cota que não permite, no entanto, fazer um download parcial.

    
por Jos 03.04.2015 / 11:51
1

Com base na resposta de Jos, aqui está um script bash que comparará os dois arquivos de byte <file_size>-628 a byte <file_size>-129 (últimos 500 bytes antes das tags ID3v1 e ID3v1.1 ), excluindo ID3v1 e ID3v1.1 tags da comparação. Copie o código do script e cole-o em um arquivo de texto chamado script.sh (ou qualquer outro) e em Terminal run chmod a+x <script_path> para marcá-lo como executável:

(Nota: o script só funciona se curl for capaz de determinar o tamanho do arquivo)

% bl0ck_qu0te%
#!/bin/bash

size1=$(du -b "$1" | sed 's/\(.*\)\t//' | tr -cd '[[:digit:]]')
size2=$(curl -I "$2" | grep -i 'content-length' | tr -cd '[[:digit:]]')
dd if="$1" of=partial1 bs=1 skip=$(($size1 - 628)) count=500
curl -r $(($size2 - 628))-$(($size2 - 129)) -o partial2 "$2"
cmp partial1 partial2
rm partial1 partial2
    
por kos 03.04.2015 / 22:02