[SHELL] identifier le fichier le plus recent
Bonjour,
je récupère régulièrement des fichiers sur un FTP, les fichiers sont du type :
nomdufichier-version
je souhaiterai pourvoir faire un script qui téléchargerait la dernière version du fichier.
exemple :
nomdufichier-1.0.0
nomdufichier-1.0.1
nomdufichier-2.0.0
je voudrais pouvoir faire un WGET de la dernière version, mais je ne sais pas comment faire identifier le fichier le plus recent,
merci de votre aide
je récupère régulièrement des fichiers sur un FTP, les fichiers sont du type :
nomdufichier-version
je souhaiterai pourvoir faire un script qui téléchargerait la dernière version du fichier.
exemple :
nomdufichier-1.0.0
nomdufichier-1.0.1
nomdufichier-2.0.0
je voudrais pouvoir faire un WGET de la dernière version, mais je ne sais pas comment faire identifier le fichier le plus recent,
merci de votre aide
A voir également:
- [SHELL] identifier le fichier le plus recent
- Fichier bin - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Classic shell - Télécharger - Personnalisation
4 réponses
A froid je ne vois pas de solution simple à part écrire un script (shell par exemple). A mon avis tu vas avoir besoin de grep, sort, uniq.
Une fois la liste des fichiers récupérés dans un fichier (par exemple list_dl.txt), trie-le pour générer un list.txt :
Ensuite le but est d'extraire le nom du fichier sans le numéro de version. Soit ce nom ne comporte pas de - (hormis celui qui sépare le nom et la version) et tu peux faire un :
... soit il va falloir te débrouiller avec une expression régulière. Le but est de convertir le fichier list.txt, qui pourrait contenir :
en un fichier files.txt :
Applique à ce fichier la commande "uniq" pour générer un files2.txt :
Ensuite fais une boucle du genre :
Il ne reste plus qu'à supprimer les fichiers temporaires... Bon il y a peut-être mieux (une commande magique) mais à froid je n'ai pas d'autres solutions qui me viennent.
Bon sinon ce qui serait pas mal si tu as la main côté serveur, (c'est ce qui est fait dans /lib d'ailleurs), ce serait d'avoir un lien symbolique qui pointe sur la "bonne" version et qui permette de s'affranchir du numéro de version.
À voir aussi mais si tu as la main côté serveur et selon ton besoin, des solutions comme rsync ou svn pourrait peut-être être plus pratique (en supposant que l'on écrase toujours le fichier par sa dernière version).
Bonne chance
Une fois la liste des fichiers récupérés dans un fichier (par exemple list_dl.txt), trie-le pour générer un list.txt :
sort -u list_dl.txt > list.txt
Ensuite le but est d'extraire le nom du fichier sans le numéro de version. Soit ce nom ne comporte pas de - (hormis celui qui sépare le nom et la version) et tu peux faire un :
cut -f1 -d'-'
... soit il va falloir te débrouiller avec une expression régulière. Le but est de convertir le fichier list.txt, qui pourrait contenir :
a-1.0.1 a-1.0.2 b-2.0.1 c-3.0.4
en un fichier files.txt :
a a b c
Applique à ce fichier la commande "uniq" pour générer un files2.txt :
uniq files.txt > files2.txt
Ensuite fais une boucle du genre :
for x in `cat files2.txt`; do for y in `grep "^$x" list.txt | sort -r` echo "Je vais maintenant récupérer $y" wget ftp://blabla/$y break done done
Il ne reste plus qu'à supprimer les fichiers temporaires... Bon il y a peut-être mieux (une commande magique) mais à froid je n'ai pas d'autres solutions qui me viennent.
Bon sinon ce qui serait pas mal si tu as la main côté serveur, (c'est ce qui est fait dans /lib d'ailleurs), ce serait d'avoir un lien symbolique qui pointe sur la "bonne" version et qui permette de s'affranchir du numéro de version.
À voir aussi mais si tu as la main côté serveur et selon ton besoin, des solutions comme rsync ou svn pourrait peut-être être plus pratique (en supposant que l'on écrase toujours le fichier par sa dernière version).
Bonne chance
Ah oui c'est mieux qu'un sort ça :-) Ca va éviter de galérer avec des grep ou des sort. Mais bon il reste à récupérer la liste des fichiers qu'il faut finalement récupérer.
Ca je suis d'accord que tu peux exécuter une commande déportée sur ssh ou ftp, mais le ls -1v sort la liste triée de tous les fichiers. Fort bien, mais il reste dans cette liste triée à extraire les bons fichiers. Ou quelque chose m'a échappé dans ce que tu as indiqué.
Oups j'étais parti que la récupération d'un seul fichier (trié sur sa version) et je pensais (dans ma tête de linotte) qu'avec un tail ou head en sortie (en fonction du besoin) ce serait suffisant...
Attendons que notre ami se manifeste (s'il se manifeste) histoire de ne pas causer dans le vide ;-))
Attendons que notre ami se manifeste (s'il se manifeste) histoire de ne pas causer dans le vide ;-))
La commande "ls" avec le paramètre "-v" trie directement les fichiers en focntion de la version :
;-))