10
votes

CheckSum Fichier distant

Y a-t-il un moyen d'obtenir un programme que je peux exécuter via la ligne de commande qui ferait une somme de contrôle d'un fichier distant? Par exemple, obtenez une somme de contrôle de https://stackoverflow.com/opensearch.xml

Je veux pouvoir obtenir une mise à jour du moment où une nouvelle entrée RSS / XML est disponible. Je pensais que je pouvais faire une somme de contrôle d'un fichier de temps en temps et si elle est différente, il doit y avoir une mise à jour. Je cherche à écrire un script shell qui vérifie de nouvelles données RSS / XML.


0 commentaires

5 Réponses :


6
votes

Pour effectuer une somme de contrôle dans le fichier, vous devrez la télécharger en premier. Au lieu de cela, utilisez si elle est modifiée - car dans vos en-têtes de demande et que Server répondra à l'en-tête 304 non modifié et sans contenu, si le fichier n'est pas modifié ou si le contenu du fichier n'a pas été modifié. Vous pouvez également vous intéresser à la vérification de la prise en charge de l'ETAG sur le serveur.

Si le téléchargement du fichier n'est pas un problème, vous pouvez utiliser MD5_FILE pour obtenir le checksum MD5 du fichier


0 commentaires

1
votes

Vous devez d'abord examiner les en-têtes HTTP pour voir si le serveur lui-même est prêt à vous dire lorsque le fichier provient; Il est considéré comme une mauvaise forme pour récupérer le fichier entier si vous n'avez pas besoin de.

Sinon, vous devrez utiliser quelque chose comme Wget ou Curl pour aller chercher le fichier. J'espère donc vraiment que vous ne planifiez pas de travailler avec quelque chose de grand.


2 commentaires

Est-ce le fonctionnement des lecteurs RSS? Comment savent-ils qu'il y a un changement dans le fichier XML et me prénomez-vous? Est-ce qu'ils vérifient constamment les en-têtes HTTP? J'aime cette idée ... n'importe quel site que vous pouvez créer un lien à ce titre serait un bon exemple de faire cela via la commande Commandline?


Oui, si vous lisez la documentation pour CURL, vous verrez qu'il dispose de diverses options d'exploitation d'en-têtes HTTP.



1
votes

Vous pouvez essayer ceci sous votre bash:

wget <http://your file link>

md5sum <your file name>


5 commentaires

Merci. Je sais que. Je voudrais éviter de télécharger le fichier si je pouvais je suppose. Il suffit de vérifier constamment une nouvelle mise à jour serait bien ... donc la seconde il y a une mise à jour que je connais. N'est-ce pas ce que font les lecteurs RSS?


Donc, quand il y a une mise à jour, où voulez-vous afficher le message? Dans le fichier journal? ou à l'intérieur de la bash actuelle?


Bash actuel. Ce que vous voulez faire, c'est la première fois d'obtenir le fichier entier et de vérifier les conditions (recherchez certains mots), puis des mises à jour futures, vérifiez simplement les nouvelles choses. Je voudrais vérifier un nombre illimité d'URL. Fondamentalement, un lecteur RSS, mais je veux ensuite vérifier les données et faire quelque chose avec les données s'il répond à une certaine condition. Mais bien sûr, je ne veux pas avoir de problèmes avec les domaines pour vérifier chaque seconde.


Donc, sans le mécanisme de vote, comment un lecteur RSS normal fonctionne-t-il? :) Ce que je peux vous offrir consiste à utiliser infini pour la boucle et à vérifier le fichier toutes les sections ....


Je ne sais pas comment fonctionne un lecteur RSS :). Si je vérifie le fichier chaque seconde, j'ai un sentiment de domaines ne sera pas trop heureux avec moi. Je prévoyais de faire une boucle pour la boucle, mais je veux le faire avec les mêmes règles qu'un lecteur RSS. Je suis sûr qu'il y a une sorte de règles pour la fréquence à laquelle ils vérifient et similaires ... non?



5
votes

CURL strud>

CURL a une option "-Z '": p> xxx pré>

donc ce que vous pouvez faire est: p> XXX PRE>

Ceci fera un téléchargement réel si le fichier distant est plus jeune que le fichier local (le fichier local peut être absent - dans ce cas, il sera téléchargé). Qui semble être exactement ce dont vous avez besoin ... p>

wget strong> h2>

wget a également une option pour suivre les horodatages - -N P>

$ wget -N http://stackoverflow.com/opensearch.xml


1 commentaires

AVERTISSEMENT: L'horodatage ne fait rien en combinaison avec -O. Voir le manuel pour plus de détails



9
votes

Un moyen rapide de le faire avec CURL consiste à piler la sortie sur SHA1SUM comme suit:

curl -s http://stackoverflow.com/opensearch.xml|sha1sum


2 commentaires

J'ajouterai -l aussi ... CURL -SL URL | SHA256SUM (MACOS) ou CURL -SL URL | Shasum -A 256 ...


CURL -SL est S Silencieux et pour L Les rétroyants de bas. Sur un Mac, je remplace sha256sum avec g SHA256SUM .