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 12/12/2014, à 12:31

corneliux

J'y suis presque....

Bonjour,
Je suis à 90% de la réussite de mon script, mais je ne comprend pas pourquoi il ne fonctionne pas. En même temps, c'est mon premier script big_smile

Je veux utiliser une image (monimage.png) pour la redimensionner dans 2 formats différents.
la première image est redimensionnée en 566x800px et écrase 'monimage.png'
la seconde image est redimensionnée en 177x250px et est renommée "monimage_s.png'

Ensuite, je souhaite envoyer ces 2 images sur un répertoire distant via ftp

Pour le moment, je parviens à redimensionner les images et en envoyer une seule grâce à ce script

#!/bin/bash


# constantes
HOST=XXXXX
LOGIN=XXXXXX
PASSWORD=XXXXX
PORT=21


for i in *.png;
do convert $i -resize 566x800 $i; done

# le transfert lui même
ftp -i -n $HOST $PORT << END_SCRIPT
quote USER $LOGIN
quote PASS $PASSWORD
pwd
bin
cd animations
put $i
quit
END_SCRIPT

for j in *.png;
do convert $j -resize 177x250 $(basename $j .png)_s.png; done

# le transfert lui même
ftp -i -n $HOST $PORT << END_SCRIPT
quote USER $LOGIN
quote PASS $PASSWORD
pwd
bin
cd animations
put $j
quit
END_SCRIPT

Comme je vous le disais , seul la première image est envoyée via ftp.
Pourquoi pas le seconde ?
Merci d'avance pour votre aide.

Hors ligne

#2 Le 12/12/2014, à 12:48

jplemoine

Re : J'y suis presque....

Sans aucune garantie :

$(basename $j .png)_s.png;

-->

 $(basename$j.png)_s.png;

Mettre $i et $j entre guillemets au cas où il y ait des espaces dans le nom.

put "$i"

et

put "$j"

Je pense que dans ton script actuel, il n'y a pas d'espace dans le premier cas (et donc ça fonctionne) mais il y en a dans le deuxième (et donc, ça ne fonctionne pas).


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#3 Le 12/12/2014, à 13:10

corneliux

Re : J'y suis presque....

Merci pour le coup de main, mais non, ça ne fonctionne pas.

En fait, l'image qui ne s'upload pas est bien redimensionnée et porte le bon nom.
Elle est de la forme : "monimage_s.png". Donc, sans espace.
Je la vois dans l'explorateur de fichier mais c'est au niveau du ftp que ça gadouille.

Hors ligne

#4 Le 12/12/2014, à 13:14

αjet

Re : J'y suis presque....

Tu as deux fois le la meme limitstring pour tes deux commandes ftp << END_SCRIPT. Je me demande si bash ne s'emmele pas les pinceaux a cause de ca.

Peut etre que du devrais essayer:

ftp ...< < END_SCRIPT_FULLPNG
...
...
END_SCRIPT_FULLPNG
....
ftp ... << END_SCRIPT_THUMBS
...
...
END_SCRIPT_THUMBS

Par ailleurs pourqoi ne pas generer les deux images dans une seule boucle et envoyer toutes les images dans une seule transaction ftp? Le script serait plus concis, plus clair et tu n'aurais pas a etablir une connection ftp par deux fois.

Dernière modification par αjet (Le 12/12/2014, à 13:14)


αjet: ça se prononce alfajet, bordel ! | GMT+1 | Viens poueter avec moi, bordel ! | Mes photos | Shaarli | Fluidbuntu-fr

Hors ligne

#5 Le 12/12/2014, à 13:17

pingouinux

Re : J'y suis presque....

Bonjour,

corneliux a écrit :

Comme je vous le disais , seul la première image est envoyée via ftp.

C'est parce que tu transfères 2 fois la 1ère image, car tu utilises l'ancien nom.

Remarques :
1) Pour moins perdre de définition de l'image, tu devrais redimensionner en partant à chaque fois de celle d'origine.
2) i et j sont des indices de boucles, et tu les utilises en dehors des boucles (ils gardent la dernière valeur).

Hors ligne

#6 Le 12/12/2014, à 13:28

corneliux

Re : J'y suis presque....

αjet a écrit :

Peut etre que du devrais essayer:

ftp ...< < END_SCRIPT_FULLPNG
...
...
END_SCRIPT_FULLPNG
....
ftp ... << END_SCRIPT_THUMBS
...
...
END_SCRIPT_THUMBS

j'ai essayé, mais ça ne vient pas de là non plus !

αjet a écrit :

pourqoi ne pas generer les deux images dans une seule boucle et envoyer toutes les images dans une seule transaction ftp?

Avant d'envoyer en ftp, j'avais fait ce mini script qui redimensionnait bien mes 2 images.

for i in *.png;
	do convert $i -resize 177x250 $(basename $i .png)_s.png;
	convert $i -resize 566x800 $i; done

Ça fonctionnait bien ! Mais depuis que je galère avec ftp, j'essaie de comprendre, alors je simplifie le script.
En fait, ce que j'aimerais savoir, c'est comment mettre les images redimensionnées dans des variables pour toutes les envoyer via une commande ftp du type

put image1 image2

Hors ligne

#7 Le 12/12/2014, à 13:31

corneliux

Re : J'y suis presque....

pingouinux a écrit :

Bonjour,

corneliux a écrit :

Comme je vous le disais , seul la première image est envoyée via ftp.

C'est parce que tu transfères 2 fois la 1ère image, car tu utilises l'ancien nom.

OK, je comprend bien le problème, mais je ne sais pas comment faire pour envoyer les 2. Comme je le dis ci-dessus, je ne sais pas comment mettre mes 2 images dans une variable pour ensuite dire à ftp d'envoyer les 2 !

Hors ligne

#8 Le 12/12/2014, à 13:50

αjet

Re : J'y suis presque....

Si tu veux envoyer toutes les images de ton dossier, tu peux faire un mput *.png par example.
Sinon tu devrais te construire un tableau de tous les noms des fichiers a envoyer et iterer dessus pour tes commandes ftp.


αjet: ça se prononce alfajet, bordel ! | GMT+1 | Viens poueter avec moi, bordel ! | Mes photos | Shaarli | Fluidbuntu-fr

Hors ligne

#9 Le 12/12/2014, à 14:45

corneliux

Re : J'y suis presque....

ben, en fait, je ne veux pas envoyer toutes les images du dossier parce que j'en créé au fur et à mesure ; mais seulement les 2 images qui sont créées dans le script.
je vais regarder du côté de mput, mais je pensais que ça allait être plus simple que ça. Un code qui ferait :
- je créée une image
- je l'envoie.
- je créé une seconde image
- je l'envoie.

Comme le disais pingouinux, mon script doit envoyer la même image 2 fois, mais il ne m'a pas dit comment faire pour envoyer chacune des images !

Dernière modification par corneliux (Le 12/12/2014, à 15:04)

Hors ligne

#10 Le 12/12/2014, à 15:09

jplemoine

Re : J'y suis presque....

Et si tu les créait dans un répertoire temporaire....
Comme ça, tu envoies la totalité des fichiers avec mput...


Membre de l'ALDIL (Association Lyonnaise pour le Développement de l'Informatique Libre)
- En pro, après 20 ans de développement, administrateur Linux / Unix depuis Avril 2019.
- En privé, sous Ubuntu-Xubuntu depuis 2009.

Hors ligne

#11 Le 12/12/2014, à 16:00

αjet

Re : J'y suis presque....

D'accord avec jplemoine. D'ailleurs le debut de ton script est incoherent avec ce que tu dis: tu dis souhaiter traiter uniquement les deux dernieres images alors que ta boucle fait une conversion sur toutes les images de ton dossier.


αjet: ça se prononce alfajet, bordel ! | GMT+1 | Viens poueter avec moi, bordel ! | Mes photos | Shaarli | Fluidbuntu-fr

Hors ligne

#12 Le 12/12/2014, à 16:03

pingouinux

Re : J'y suis presque....

Pour utiliser des variables :

$ ancien_nom=monimage.png

$ nouveau_nom=${ancien_nom%.png}_s.png

$ echo "$nouveau_nom"
monimage_s.png

Hors ligne

#13 Le 12/12/2014, à 16:54

nany

Re : J'y suis presque....

Bonjour,

si j’ai bien tout compris, en reprenant le script d’origine,

#!/bin/bash

# constantes
HOST=XXXXX
LOGIN=XXXXXX
PASSWORD=XXXXX
PORT=21

files=""
for i in *.png
do
  j=$(basename $i .png)_s.png
  convert $i -resize 177x250 "$j"
  convert $i -resize 566x800 "$i"
  files="$files $i $j"
done

# le transfert lui même
ftp -i -n $HOST $PORT << END_SCRIPT
quote USER $LOGIN
quote PASS $PASSWORD
pwd
bin
cd animations
mput "$files"
quit
END_SCRIPT

exit 0

Hors ligne

#14 Le 21/01/2015, à 13:59

corneliux

Re : J'y suis presque....

Oups, désolé, vos réponses m'avaient échappé.
αjet : D'accord avec toi, mais je ne sais pas comment faire pour agir sur un seul fichier !
pingouinux : Voilà qui devrait m'aider :-)
nany : je vais tester ça cet après-midi, mais le script agit toujours sur l'ensemble des images présentes dans le répertoire, et pas sur celle que j'ai sélectionné.

Hors ligne

#15 Le 21/01/2015, à 14:58

nany

Re : J'y suis presque....

nany a écrit :

[…]
si j’ai bien tout compris, […]

corneliux a écrit :

[…] mais le script agit toujours sur l'ensemble des images présentes dans le répertoire, et pas sur celle que j'ai sélectionné.

Je n’avais pas tout bien compris alors. En effet, ma proposition agit sur toutes les images.

Contre-proposition :

#!/bin/bash

# constantes
HOST=XXXXX
LOGIN=XXXXXX
PASSWORD=XXXXX
PORT=21

files=""
images=$(ls *.png)
echo "$images"
echo "quelle image voulez-vous redimensionner ?"
read i
if [ -f "$i" ] && [ "$i" in "$images" ] ; then
  j=$(basename "$i" .png)_s.png
  convert "$i" -resize 177x250 "$j"
  convert "$i" -resize 566x800 "$i"
  files="$files $i $j"
else
  echo "Ce fichier n’existe pas ou n’est pas au format souhaité."
fi

# le transfert lui même
ftp -i -n $HOST $PORT << END_SCRIPT
quote USER $LOGIN
quote PASS $PASSWORD
pwd
bin
cd animations
mput "$files"
quit
END_SCRIPT

exit 0

Hors ligne