1 votes

Vérifier la redondance avant de télécharger un fichier

Existe-t-il un moyen de vérifier si vous avez déjà téléchargé un fichier avant de le télécharger ?

Je sais que -

  • wget ne peut le faire que si le nom du fichier à récupérer est le même que celui du fichier déjà récupéré auparavant.
  • Vous pouvez demander somme de contrôle ou md5hash pour trouver et supprimer les fichiers redondants, mais cela ne peut se faire qu'APRÈS avoir téléchargé le fichier.

Veuillez suggérer un moyen de vérifier si un fichier est identique en termes de contenu avant de le télécharger à nouveau ENTIEREMENT (indépendamment du nom de fichier dans lequel il sera sauvegardé).

Pour plus de précision : Je suis intéressé par le téléchargement UNIQUEMENT mp3 mais provenant de sources différentes telles que Jamendo, Soundcloud, etc., qui peuvent avoir le même contenu (chanson) mais dont les noms de fichiers sont différents.

2voto

Jos Points 23588

Lire les 500 premiers octets du premier fichier :

head -c 500 file1.mp3 > fragment1

Utilisation curl -r 0-499 -o fragment2 http://... pour récupérer les 500 premiers octets du second fichier. Ensuite, faites diff fragment1 fragment2 pour voir s'ils sont égaux.

curl est un outil comme wget mais avec plus d'options. Les -r vous permet de spécifier un intervalle, ce qui se traduira par un téléchargement partiel. wget dispose d'une option de quota qui ne vous permet toutefois pas d'effectuer un téléchargement partiel.

1voto

ieplugin Points 216

Sur la base de la réponse de Jos, voici une bash script qui comparera les deux fichiers à partir de l'octet <file_size>-628 vers octet <file_size>-129 (500 derniers octets avant ID3v1 et ID3v1.1 ), à l'exclusion des ID3v1 et ID3v1.1 de la comparaison. Copiez le code du script et collez-le dans un fichier texte nommé script.sh (ou autre) et dans un Terminal courir chmod a+x <script_path> pour le marquer comme exécutable :

(Note : le script ne fonctionne que si curl est capable de déterminer la taille du fichier)

Utilisation : <script_path>/script.sh <file_path> <url>

#!/bin/bash

size1=$(du -b "$1" | sed 's/\(.*\)\t/\1/' | 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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X