Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 15/09/2020, à 07:40

DonutMan75

[RESOLU] Optimisation et automatisation d'un transfert

Bonjour à tous,
j'ai accès à un serveur sftp distant sur lequel je dois télécharger de (gros) fichier de données.
Ces fichiers ont tous un nom de la forme data_YYYYMMDD_hf.dat où YYYYMMDD représente un jour.

Par exemple :

...
data_20200817_hf.dat
data_20200818_hf.dat
data_20200819_hf.dat
data_20200820_hf.dat
data_20200821_hf.dat
data_20200822_hf.dat
data_20200823_hf.dat
data_20200824_hf.dat
data_20200825_hf.dat
data_20200826_hf.dat
data_20200827_hf.dat
data_20200828_hf.dat
data_20200829_hf.dat
data_20200830_hf.dat
data_20200831_hf.dat
data_20200901_hf.dat
data_20200902_hf.dat
data_20200903_hf.dat
data_20200904_hf.dat
data_20200905_hf.dat
...

Je souhaite télécharger les données (par exemple) entre le 18/08/2020 et le 04/09/2020 (en gras dans le listing ci-dessus).
Ce que je fais (manuellement jusqu'à présent) c'est, une fois connecté en ligne de commande via lftp :

mget data_2020081[8-9]*dat
(j'attends un peu)
mget data_2020082[0-9]*dat
(j'attends un peu)
mget data_2020083[0-1]*dat
(j'attends un peu)
mget data_2020090[1-4]*dat
(j'attends un peu)

Comme vous le voyez, c'est long et fastidieux... Mais j'ai l'impression que les regex passées à mget sont assez basiques et du coup, je ne pense pas pouvoir faire mieux...

J'envisage toutefois de mettre ça dans un script.
Pour le moment la seule solution que j'ai trouvé c'est de passer la boucle sur les jours DANS le script bash. Quelque chose du genre (pseudo-code pour faire passer l'idée hein) :

for k in seq(0, 20); do
  pattern=$(date --date'20200818 + $k days' +'%Y%m%d'
  lftp sftp://toto.fr -e "get data_${pattern}*dat
done

Le problème, c'est que ce script perd du temps car il se connecte/déconnecte pour chaque fichier téléchargé...

Qu'en pensez-vous ? Auriez-vous des idées géniales ??
Je sais que rsync fait des miracles sur ces cas de figure, mais il me semble qu'un démon rsync doit tourner côté serveur non ?

Merci d'avance et bonne journée smile

Donut

Dernière modification par DonutMan75 (Le 30/09/2020, à 07:40)

Hors ligne

#2 Le 15/09/2020, à 11:11

kamaris

Re : [RESOLU] Optimisation et automatisation d'un transfert

Si tu travailles sur le serveur distant où le shell est basique, peut-être disposes-tu de sed et xargs ?
Auquel cas tu peux faire

printf '%s\n' * | sed -n '/data_20200818_hf.dat/,/data_20200904_hf.dat/p' | xargs -d'\n' mget

Si la commande est préparée depuis le client local où tu as bash, alors prépare tes noms de fichiers dans un tableau et passe les à la commande get de lftp, qui, si j'en crois le manuel, accepte plusieurs arguments :

lftp sftp://toto.fr -e "get ${filenames[@]}"

Hors ligne

#3 Le 15/09/2020, à 13:42

DonutMan75

Re : [RESOLU] Optimisation et automatisation d'un transfert

Hello kamaris,
super, ta suggestion de passer plusieurs arguments à get me plaît bien !
Je vais creuser dans ce sens là

Merci !

Donut

Hors ligne