![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| Unix Forum d'entraide sur les systèmes Unix et dérivés (*BSD, AIX, etc.). Avant de poster ->F.A.Q BSD F.A.Q. Aix |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Futur Membre du Club
![]() Date d'inscription: octobre 2007
Messages: 39
|
, Je dois faire un script Unix qui utilise la commande SFTP. Mon but est de déplacer un certain type de fichiers d'un répertoire à un autre. Mon script à cette tête la : Code :
#!/usr/bin/ksh touch log.txt sftp $1@$2 << EOF >> log.txt cd $3 mget *.dup rm *.dup cd $4 mput *.dup bye EOF >> log.txt rm ./*.dup >> log.txt Code :
$1 et $2 -> pour pouvoir se connecter / se logguer $3 -> le répertoire où je récupère les fichiers $4 -> le répertoire où je dépose les fichiers récupéré ![]() J'ai créer un fichier de log pour ne pas avoir de message sur ma sortie standard, ce script fait exactement ce que je veux mais malheuresement si une erreur intervient ('dossier non existant', 'pas de fichiers présent de ce type', ...), des messages apparaissent sur la sortie standard et non pas dans le fichier de log ....... This is my problem. Je voudrais simplement mettre tous les messages que génère ce script dans le fichier de log ... ca parait si bête, mais je n'arrive pas Si vous avez une tite idée en tête, merci à vous. ![]() PS : ![]() Tchaoo
|
|
|
|
|
|
#2 (permalink) |
|
Membre éprouvé
![]() Date d'inscription: mars 2007
Localisation: Toulouse
Messages: 471
|
Redirige la sortie d'erreur (2) dans la sortie standard (1) :
s Code :
ftp $1@$2 << EOF >> log.txt 2>&1
__________________
Loi de Murphy: La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi. La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi. Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi. |
|
|
|
|
|
#3 (permalink) |
|
Futur Membre du Club
![]() Date d'inscription: octobre 2007
Messages: 39
|
Re,
Bravo bravo , j'avais trouvé une solution tordu sinon. J'appelais ce script à partir d'un autre script avec à la fin de cet appel : >> log.txt 2>/dev/null.Ta solution est meilleur ![]() Par contre, j'ai remarqué un 2ème problème à ce script, c'est que avec ceci donc :Code :
#!/usr/bin/ksh echo "******* Starting Script *******" >> log.txt sftp $1@$2 << EOF >> log.txt 2>&1 cd $3 mget *.dup rm *.dup cd $4 mput *.dup bye EOF rm ./*.dup echo "******* Ending Script *******" >> log.txt exit 0 Une idée ?
|
|
|
|
|
|
#4 (permalink) | |
![]() Date d'inscription: mai 2004
Localisation: Grenoble
Âge: 28
Messages: 2 642
|
Bonjour,
Citation:
Il est conseillé de le protéger avec une phrase du genre "Voulez-vous supprimer les fichier *.dup ?", puis une lecture de réponse (Y/N), avec comme valeur par défaut (si autre chose que Y ou N est tapé) la non-suppression. Sinon, si tu veux effacer les fichiers dans le code exécuté par sftp, il faut que tu indiques que la commande doit avoir une portée locale. Pour ce faire, il faut la précéder de '!' : Code :
# ..... !rm *.dup EOF
__________________
Non au langage SMS Modérateur "C", "Informatique Générale & Hardware" et "Windows, Système & Logiciels" Les règles du forum |
|
|
|
|
|
|
#5 (permalink) |
|
Futur Membre du Club
![]() Date d'inscription: octobre 2007
Messages: 39
|
Re bonjour les amis,
Alors, hihi, le PETIT problème ci-dessus est assez énervant en fait, mais la solution a été trouvé. En fait à la ligne 'EOF' (celle après le bye), il y avait un espace en trop ... Qu'est-ce que je vous voulez que je vous disent ??? Bon voici sa petite tête maintenant : Code :
#!/usr/bin/ksh echo "******* Starting Script *******" >> log.txt echo "Connection to $1@$2" >> log.txt sftp $1@$2 << EOF >> log_sftp.log 2>&1 cd $3 mget *.failed rm *.failed cd $4 mput *.failed quit EOF echo "Bye connection sftp" >> log.txt rm ./*.failed rm log_sftp.log echo "******* Ending Script *******" >> log.txt exit 0 ![]() Jusqu'à maintenant je ne prenais les fichiers que d'un certain type et maintenant je voudrais prendre les fichiers autres que le type spécifier dont voici le masque : /c[a-f]t.\D{1,5}\d{1,3}.\d{14}.\d{14}/ (j'espère que les masques marchent sous unix Allez, A vous , et je vous tient au courant si j'ai trouvé !!!!!!!!!!!!! Marki encore de votre aide ... |
|
|
|
|
|
#6 (permalink) |
![]() Date d'inscription: mai 2004
Localisation: Grenoble
Âge: 28
Messages: 2 642
|
Bonjour,
Content que tu aies trouvé le soucis. Pour ton nouveau problème, je crois me souvenir que FTP gère les méta-caractères, mais pas les expressions régulières. Je ne peux que te conseiller de faire des essais pour voir si tu arrives à jouer là dessus.
__________________
Non au langage SMS Modérateur "C", "Informatique Générale & Hardware" et "Windows, Système & Logiciels" Les règles du forum |
|
|
|
|
|
#7 (permalink) |
|
Futur Membre du Club
![]() Date d'inscription: octobre 2007
Messages: 39
|
Bonjour,
Voici le code final, ce n'est sans doute pas ce qui a de plus propre mais je n'ais pas eu d'autre idée. En résumé, -> je créer un répertoire temporaire où je vais me trouver ensuite, -> je me connecte en SFTP, -> je me dirige dans le répertoire voulu, -> je prend tous les fichiers, -> je quitte la connexion -> je supprime tous les fichiers qui correspond à un certain masque, -> je fais une boucle, pour chaque fichier se connecter en SFTP, put le fichier dans le repertoire voulu et l'effacer en local -> fin de boucle, effacer le repertoire temporaire NB : Je ne fais pas un "mput" sans boucle, car je voulais, dans mes logs, savoir quel fichier je transférait. Code :
LOG_FILE_SFTP=/tmp/sftp.log
LOG_FILE=/tmp/logScript.log
mkdir ./tmpSFTP
cd ./tmpSFTP
echo "Connection with $1@$2" >> $LOG_FILE
sftp $1@$2 << EOF >> $LOG_FILE_SFTP 2>&1
!echo "Check in $3 directory" >> $LOG_FILE
cd $3
mget *
quit
EOF
for FILE in `find /tmp/tmpSFTP/ -type f | grep -e "^\\./c[af]t\\.[a-z]\\{1,5\\}[0-9]\\{1,3\\}\\.[0-9]\\{14\\}\\.[0-9]\\{14\\}$"`
do
rm $FILE
done
for FILE in `find /tmp/tmpSFTP/ -type f`
do
echo "Move $FILE to $4 directory" >> $LOG_FILE
sftp $1@$2 << EOF >> $LOG_FILE_SFTP 2>&1
cd $4
put $FILE
cd $3
rm $FILE
!rm $FILE
quit
EOF
done
echo "Quit SFTP connection" >> $LOG_FILE
cd ..
rm -r ./tmpSFTP
|
|
|
|
![]() |
![]() |
||
Commande SFTP Unix
|
||
| Outils de la discussion | |
|
|