[shell] comparer un fichier local et un fichier distant (http)?

comparer un fichier local et un fichier distant (http)? [shell] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 11-02-2004 à 12:04:36    

Salut,
 
je suis en trian d'écrire un script pour mettre à jour ma base de ip-to-country.
 
Le principe est simple, tous les jours je vérifie si une nouvelle version de la base est dispo à l'adresse suivante : http://ip-to-country.webhosting.in [...] ry.csv.zip
 
puis je mets à jour ma base avec la commande LOAD DATA de mysql.
 
 
 
Ce que je n'arrive pas à faire proprement c'est comparer les versions des fichiers, pour l'instant j'arrive à le faire avec la méthode bourrine, je télécharge le fichier et je fait un diff.
Mais j'aimerais ne pas avoir à le télécharger pour vérifier si c'est bien la dernière version (histoire de ne pas leur bouffer de bande passante, ni à moi d'ailleurs).
 
 
Existe-t'il un moyen? avec wget?
 
NB : une simple comparaison sur la date suffira.


Message édité par duch le 11-02-2004 à 12:05:09
Reply

Marsh Posté le 11-02-2004 à 12:04:36   

Reply

Marsh Posté le 11-02-2004 à 12:13:21    

je pense pas que tu puisse accéder à la taille du fichier en http :/ par conter en ftp, ce serait possible, mais as-tu un accèes ftp ?

Reply

Marsh Posté le 11-02-2004 à 12:15:20    

Dans la page d'acceuil y a "The database was last updated on February 08 2004"
 
Tu compare cette date a ce que tu as et puis voilà.
 
PS : pour comparer 2 fichiers un truc + propre est la methode md5sum.
 
A+

Reply

Marsh Posté le 11-02-2004 à 12:50:34    

et même avec les en-têtes http, y'a pas un moyen?

Reply

Marsh Posté le 11-02-2004 à 13:00:44    

Je vois pas trop le rapport avec ton fichier et les en tetes HTTP ...
 
A+

Reply

Marsh Posté le 11-02-2004 à 13:32:29    

Citation :


je pense pas que tu puisse accéder à la taille du fichier en http


 
 Si, c'est possible...
 

Citation :


Je vois pas trop le rapport avec ton fichier et les en tetes HTTP  


 
 ... si le serveur respecte un minimum le protocole HTTP, il doit renvoyer l'entête "Content-Length" qui est la taille du fichier demandé. Enfin, un serveur ne renvoie pas toujours cette entête, notamment dans le cas de scripts dynamiques pour lesquels il ne peut pas déterminer la taille à l'avance.
 Bref... Dans le cas présent, c'est un fichier statique, il est donc probable que ce champ soit correctement rempli.
 
 Avec curl :


$ curl --head http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip
HTTP/1.1 200 OK
Date: Wed, 11 Feb 2004 12:25:01 GMT
Server: Apache
Last-Modified: Sun, 08 Feb 2004 13:18:18 GMT
ETag: "3fa496-5d46f-4026371a"
Accept-Ranges: bytes
Content-Length: 382063
Content-Type: application/zip
 


 
Avec wget, je crois qu'il faut utiliser "-S" et "--spider" (cf. man)


$ wget -S --spider http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip
--13:27:28--  http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip
           => `ip-to-country.csv.zip'
Resolving ip-to-country.webhosting.info... 209.61.162.6
Connecting to ip-to-country.webhosting.info[209.61.162.6]:80... connected.
HTTP request sent, awaiting response...
 1 HTTP/1.1 200 OK
 2 Date: Wed, 11 Feb 2004 12:27:29 GMT
 3 Server: Apache
 4 Last-Modified: Sun, 08 Feb 2004 13:18:18 GMT
 5 ETag: "3fa496-5d46f-4026371a"
 6 Accept-Ranges: bytes
 7 Content-Length: 382063
 8 Keep-Alive: timeout=15
 9 Connection: Keep-Alive
10 Content-Type: application/zip
200 OK
 


 
 Avec ces infos, on peut comparer la date de dernière modification (Last-Modified) et la taille (Content-Length), ce qui permet d'être à peu près sur de son coup.
 
 Remarque : certains serveurs renvoient l'entête "Content-MD5", qui est la somme de contrôle MD5 du fichier, ce qui ici serait plus fiable pour comparer. Mais bon, ce n'est a priori pas le cas pour ce serveur.


Message édité par unk00 le 11-02-2004 à 14:31:40
Reply

Marsh Posté le 11-02-2004 à 14:02:35    

:jap:

Reply

Marsh Posté le 11-02-2004 à 14:30:47    

super!!!
 
merci.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed