Script unix pour un FTP recursif ?
Fermé
j'ai besoin de transferer via FTP tout le contenu d'un repertoire
pour ce faire, je n'ai accès comme client ftp qu'à la commande ftp du shell unix.
Est-il possible de faire un script permettant d'envoyer tout le contenu d'un repertoire (dossiers et fichiers), a partir du nom de ce repertoire, via la commande ftp ?
pour ce faire, je n'ai accès comme client ftp qu'à la commande ftp du shell unix.
Est-il possible de faire un script permettant d'envoyer tout le contenu d'un repertoire (dossiers et fichiers), a partir du nom de ce repertoire, via la commande ftp ?
A voir également:
- Script unix pour un FTP recursif ?
- Script vidéo youtube - Guide
- Microsoft activation script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Core ftp - Télécharger - Téléchargement & Transfert
- Script les visiteurs pdf - Forum Cinéma / Télé
20 réponses
j'ai déjà écrit des scripts en shell qui permettent de faire des transferts par ftp de répertoire et sous-répertoire en mode récursif
avec une connexion sécurisée user et mot de passe écrite dans le script.
on peut ainsi faire une sauvegarde automatique de répertoires de plusieurs PC à partir d'une machine unix.
avec une connexion sécurisée user et mot de passe écrite dans le script.
on peut ainsi faire une sauvegarde automatique de répertoires de plusieurs PC à partir d'une machine unix.
OK OK ... lol ! desolé pour le coup de bourre gt vener ce jour la puisque g cherché le moyen de faire des ftp en fonction du user et du password qui seraient ds des variables et ke je ne trouvais pas la syntaxe... c chose fait et tu me dit que g repondu sommairement ... ok ct de la recuperation et pas de l'envoi, mais je t'assure que by marche aussi bien que bye !!!
enfin voici un script de recuperation de fichiers distants en fonction d'un user et password qu'on peu declarer en variable:
avec comme variables (entre [] = pas obligé)
liste=/.../fichier_liste_des_machines.txt (liste séparée par des espaces ou des retours chariot)
REPLOCAL=/.../repertoirelocal
SOUSREP1=sousrepertoire1
SOUSREP2=...
...
[LOG=/.../fichierlog.log]
USER=user
PASSWORD=password
# DEBUT ################
for MACHINE in $liste
do
ftp -inv $MACHINE <<FINDETEXTE [>$LOG]
user $USER $PASSWORD
lcd $REPLOCAL
cd $REPDISTANT
mget *
lcd $REPLOCAL/$SOUSREP1
cd $REPDISTANT/$SOUSREP1
mget *
...
lcd $REPLOCAL/$SOUSREPn
cd $REPDISTANT/$SOUSREPn
mget *
bye
FINDETEXTE
done
####################
etc... ce n'est qu'un exemple, si vous avez des sous sous sous repertoires ca marche pareil, même principe... mais il y a mieux si vous avez beaucoup de sous repertoires : il faut faire une fonction "FTP_mget" par exemple, avec les user, pass, reps en parametres et faire la boucle en fonction des repertoires, et a chaque fois appeler la fonction FTP_mget, ca sera plus simple a gerer...
mais est ce plus rapide ? j'en doute, car la procédure d'authentification prend du temps, et repetée beaucoup cela pourait faire baisser les perf grave...
enfin voila o cas ou une fonction comme decrit ci dessus, qu'on appelerai avec des parametres dans l'ordre des declaration de variables interne, mais c pas obligé, on peut se contenter de declarer juste la machine et les repertoires si le user et le pass sont communs et declarés avant, a adapter !
FTP_mget ()
{
MACHINE=$1
USER=$2
PASSWORD=$3
REPLOCAL=$4
REPDISTANT=$5
ftp -inv $MACHINE <<FINDETEXTE
user $USER $PASSWORD
lcd $REPLOCAL
cd $REPDISTANT
mget *
bye
FINDETEXTE
}
explications sur les parametres du programme ftp:
-i == mode interactif OFF == pas de question "telecharger ce fichier (O/N) ?" en cas de mget ou mput
-n == n'utilise pas le .netrc
-v == verbose, dans la log du ftp si vous l'utilisez il y aura des lignes commencant par un numero a 3 chiffres, comme des codes retours, ca vous permet par la suite de detecter des erreurs ds vos transferts, avec des grep dans le fichier de log, après chaque appel de la fonction FTP_mget par exemple...
enfin voici un script de recuperation de fichiers distants en fonction d'un user et password qu'on peu declarer en variable:
avec comme variables (entre [] = pas obligé)
liste=/.../fichier_liste_des_machines.txt (liste séparée par des espaces ou des retours chariot)
REPLOCAL=/.../repertoirelocal
SOUSREP1=sousrepertoire1
SOUSREP2=...
...
[LOG=/.../fichierlog.log]
USER=user
PASSWORD=password
# DEBUT ################
for MACHINE in $liste
do
ftp -inv $MACHINE <<FINDETEXTE [>$LOG]
user $USER $PASSWORD
lcd $REPLOCAL
cd $REPDISTANT
mget *
lcd $REPLOCAL/$SOUSREP1
cd $REPDISTANT/$SOUSREP1
mget *
...
lcd $REPLOCAL/$SOUSREPn
cd $REPDISTANT/$SOUSREPn
mget *
bye
FINDETEXTE
done
####################
etc... ce n'est qu'un exemple, si vous avez des sous sous sous repertoires ca marche pareil, même principe... mais il y a mieux si vous avez beaucoup de sous repertoires : il faut faire une fonction "FTP_mget" par exemple, avec les user, pass, reps en parametres et faire la boucle en fonction des repertoires, et a chaque fois appeler la fonction FTP_mget, ca sera plus simple a gerer...
mais est ce plus rapide ? j'en doute, car la procédure d'authentification prend du temps, et repetée beaucoup cela pourait faire baisser les perf grave...
enfin voila o cas ou une fonction comme decrit ci dessus, qu'on appelerai avec des parametres dans l'ordre des declaration de variables interne, mais c pas obligé, on peut se contenter de declarer juste la machine et les repertoires si le user et le pass sont communs et declarés avant, a adapter !
FTP_mget ()
{
MACHINE=$1
USER=$2
PASSWORD=$3
REPLOCAL=$4
REPDISTANT=$5
ftp -inv $MACHINE <<FINDETEXTE
user $USER $PASSWORD
lcd $REPLOCAL
cd $REPDISTANT
mget *
bye
FINDETEXTE
}
explications sur les parametres du programme ftp:
-i == mode interactif OFF == pas de question "telecharger ce fichier (O/N) ?" en cas de mget ou mput
-n == n'utilise pas le .netrc
-v == verbose, dans la log du ftp si vous l'utilisez il y aura des lignes commencant par un numero a 3 chiffres, comme des codes retours, ca vous permet par la suite de detecter des erreurs ds vos transferts, avec des grep dans le fichier de log, après chaque appel de la fonction FTP_mget par exemple...
teebo
Messages postés
33491
Date d'inscription
jeudi 14 octobre 2004
Statut
Modérateur
Dernière intervention
24 février 2011
1 793
24 juin 2003 à 17:43
24 juin 2003 à 17:43
Moi j'utilise dftp ou un truc du genre, j'essaierai de penser a regarder ca ce soir a moins que je retrouve ca sur le net... C'est pratique tu peux faire une copie de ce que tu as dans un repertoire...
. .
\_/
. .
\_/
teebo
Messages postés
33491
Date d'inscription
jeudi 14 octobre 2004
Statut
Modérateur
Dernière intervention
24 février 2011
1 793
24 juin 2003 à 18:14
24 juin 2003 à 18:14
http://lftp.yar.ru/lftp-man.html
Hop, en fait ca s'appelle lftp, je ne sais pas il est peut etre installe ...
Sinon ben ca doit etre faisable de faire le script en ftp pur mais relativement fastidieux quand meme j'en ai peur :-S
. .
\_/
Hop, en fait ca s'appelle lftp, je ne sais pas il est peut etre installe ...
Sinon ben ca doit etre faisable de faire le script en ftp pur mais relativement fastidieux quand meme j'en ai peur :-S
. .
\_/
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
eric_fortique
Messages postés
9
Date d'inscription
samedi 8 mai 2004
Statut
Membre
Dernière intervention
12 mai 2004
8 mai 2004 à 02:39
8 mai 2004 à 02:39
Salut tous ,
Je veux le script ftp sous linux.
ou idèe comment le programmer les fonctions nècessairre .
C t'un projet qu'il me faux rendre d'ici une semaine .
C urgent !!!
Merci pour tout aides qui me sera apportè .
Je veux le script ftp sous linux.
ou idèe comment le programmer les fonctions nècessairre .
C t'un projet qu'il me faux rendre d'ici une semaine .
C urgent !!!
Merci pour tout aides qui me sera apportè .
Elise78
Messages postés
77
Date d'inscription
mardi 18 mai 2004
Statut
Membre
Dernière intervention
16 novembre 2006
3
27 juil. 2004 à 14:24
27 juil. 2004 à 14:24
Salut !
Alors justement, je faisais un petit tour sur ce post cherchant désespéremment une réponse à mon prblème de la meme acabie et oh rage, oh désespoir quand j'arrive à la fin et remarque qu'il n'y à que partiellement la réponse ... :-( Vraiment dommage.
Alors si quelqu'un par hasard, à le code et veut bien le faire partager aux autres ca me serait bien utile. Ma requête se tourne en premier vers l'auteur du code en question. ;-)
Merci d'avance. Elise78 :-p
PS : mon adresse mail au cas ou : mannon78_At_hotmail.com
Alors justement, je faisais un petit tour sur ce post cherchant désespéremment une réponse à mon prblème de la meme acabie et oh rage, oh désespoir quand j'arrive à la fin et remarque qu'il n'y à que partiellement la réponse ... :-( Vraiment dommage.
Alors si quelqu'un par hasard, à le code et veut bien le faire partager aux autres ca me serait bien utile. Ma requête se tourne en premier vers l'auteur du code en question. ;-)
Merci d'avance. Elise78 :-p
PS : mon adresse mail au cas ou : mannon78_At_hotmail.com
Elise78
Messages postés
77
Date d'inscription
mardi 18 mai 2004
Statut
Membre
Dernière intervention
16 novembre 2006
3
>
scavenger
31 juil. 2004 à 23:34
31 juil. 2004 à 23:34
Salut scavenger !!
Pour etre plus precise je cherche la possibilite de faire une connexion telnet dans un script shell bash. Mais apparemment ca a l'air infaisable. Ou bien personne ne sait faire :-p . Sinon, j'ai eu le temps de faire mon propre script pour aller copier un repertoire complet d'un serveur distant par ftp. C'est pas hyper bien codé avec des niveaux d'arborescence et tout mais ca marche bien, il faut juste que je verifie si les fichiers repondant au motif .* sont pris en compte.
Ce qui fait que je ne le trouve pas parfait c'est que je suis obligee d'aller a l'aide d'un telnet (le meme que je voulais automatiser) creer le fichier de l'arborescence qui va etre recupere par mon script et qui va servir pour recuperer l'arborescence complete sur le poste cible.
Dasn la version quasi finale de mon script j'ai 9 parametres <serveurdist> <login> <passwd> <deb_arbo_serveur> <deb_arbo_client> <proprio> <groupe> <option> (et y'en aurait deux ou trois en travaux)
Ce qui correspond à : je voudrais me connecter a $serveurdist avec mon $login et mon $passwd pour recuperer le repertoire qui est a $deb_arbo_serveur et le mettre dans le repertoire deb_arbo_client ce repertoire devra etre la propriete de $proprio et du groupe $groupe, sans oublier que je voudrais que les données soient recuperees en mode $option (ascii ou binary) ... etc
Cordialement, Melle Elise78
Pour etre plus precise je cherche la possibilite de faire une connexion telnet dans un script shell bash. Mais apparemment ca a l'air infaisable. Ou bien personne ne sait faire :-p . Sinon, j'ai eu le temps de faire mon propre script pour aller copier un repertoire complet d'un serveur distant par ftp. C'est pas hyper bien codé avec des niveaux d'arborescence et tout mais ca marche bien, il faut juste que je verifie si les fichiers repondant au motif .* sont pris en compte.
Ce qui fait que je ne le trouve pas parfait c'est que je suis obligee d'aller a l'aide d'un telnet (le meme que je voulais automatiser) creer le fichier de l'arborescence qui va etre recupere par mon script et qui va servir pour recuperer l'arborescence complete sur le poste cible.
Dasn la version quasi finale de mon script j'ai 9 parametres <serveurdist> <login> <passwd> <deb_arbo_serveur> <deb_arbo_client> <proprio> <groupe> <option> (et y'en aurait deux ou trois en travaux)
Ce qui correspond à : je voudrais me connecter a $serveurdist avec mon $login et mon $passwd pour recuperer le repertoire qui est a $deb_arbo_serveur et le mettre dans le repertoire deb_arbo_client ce repertoire devra etre la propriete de $proprio et du groupe $groupe, sans oublier que je voudrais que les données soient recuperees en mode $option (ascii ou binary) ... etc
Cordialement, Melle Elise78
ScavengeR
>
Elise78
Messages postés
77
Date d'inscription
mardi 18 mai 2004
Statut
Membre
Dernière intervention
16 novembre 2006
Modifié le 6 sept. 2004 à 14:50
Modifié le 6 sept. 2004 à 14:50
salut elise,
mon email est Adresse supprimée Modération CCM au cas ou...
apparemment d'apres ce que je comprend, tu ne connais pas l'arbo distante, c pourquoi tu veux du telnet automatisé pour la récupérer et t'en servir dans ton ftp... c ca ????
saches que du telnet automatisé je ne sais pas si ca marche g jamais essayé, mais suivant le même principe de l'envoi de commandes avec la redirection shell comme j'ai montré dans mes exemples, ca devra
mon email est Adresse supprimée Modération CCM au cas ou...
apparemment d'apres ce que je comprend, tu ne connais pas l'arbo distante, c pourquoi tu veux du telnet automatisé pour la récupérer et t'en servir dans ton ftp... c ca ????
saches que du telnet automatisé je ne sais pas si ca marche g jamais essayé, mais suivant le même principe de l'envoi de commandes avec la redirection shell comme j'ai montré dans mes exemples, ca devra
ScavengeR
>
Elise78
Messages postés
77
Date d'inscription
mardi 18 mai 2004
Statut
Membre
Dernière intervention
16 novembre 2006
1 août 2004 à 12:27
1 août 2004 à 12:27
(.....) ca devrait peut etre marcher ??
genre
telnet $machine <<EOF
commandes...
EOF
sinon tu as essayé le rsh ? ca marche bien ca !
n'hésite a insister si g tjs pas compris LOL !!!
aller a plus amuse toi bien !!
scavenger
genre
telnet $machine <<EOF
commandes...
EOF
sinon tu as essayé le rsh ? ca marche bien ca !
n'hésite a insister si g tjs pas compris LOL !!!
aller a plus amuse toi bien !!
scavenger
Elise78
Messages postés
77
Date d'inscription
mardi 18 mai 2004
Statut
Membre
Dernière intervention
16 novembre 2006
3
>
Elise78
Messages postés
77
Date d'inscription
mardi 18 mai 2004
Statut
Membre
Dernière intervention
16 novembre 2006
2 août 2004 à 16:59
2 août 2004 à 16:59
Salut ScavengeR !!
Il me semble que tu as tout compris.
Le truc c'est que je suis hyper feignante et que je n'aime pas faire ne serait-ce 10 fois la même manip fastidieuse (et surtout j'ai peur d'oublier quelque chose). Et c'est dans ces moments la ou je me sens bien avec l'informatique lol
Je voudrais que ce script marche pour le plus le cas possible sans pour autant faire un applicatif graphique … par exemple je récupère ce script et j'arrive a le faire tourner sur mon poste personnel …
Effectivement je cherche un truc du style :
telnet $machine <<EOF
commandes...
EOF
ou
par une commande que je peux lancer par ftp
parce que je ne peux pas créer mon fichier
arbo_serveurdist.txt par le ftp (avec la commande
find . –type d echo{} \; >> arbo_serveurdist.txt
Je m'amuse comme une folle lol !!!
Il me semble que tu as tout compris.
Le truc c'est que je suis hyper feignante et que je n'aime pas faire ne serait-ce 10 fois la même manip fastidieuse (et surtout j'ai peur d'oublier quelque chose). Et c'est dans ces moments la ou je me sens bien avec l'informatique lol
Je voudrais que ce script marche pour le plus le cas possible sans pour autant faire un applicatif graphique … par exemple je récupère ce script et j'arrive a le faire tourner sur mon poste personnel …
Effectivement je cherche un truc du style :
telnet $machine <<EOF
commandes...
EOF
ou
par une commande que je peux lancer par ftp
parce que je ne peux pas créer mon fichier
arbo_serveurdist.txt par le ftp (avec la commande
find . –type d echo{} \; >> arbo_serveurdist.txt
Je m'amuse comme une folle lol !!!
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 662
24 juin 2003 à 17:25
24 juin 2003 à 17:25
oui ce genre de script existe.
J'en ai vu en perl, en Python...
J'en ai vu en perl, en Python...
batmat
Messages postés
1871
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008
114
24 juin 2003 à 18:50
24 juin 2003 à 18:50
oui certainement dans ces langages, c'est vrai.
Moi, je pensais au shell "classique" (*sh). Il me semble que ce n'est pas possible avec celui-ci
@++
Poster, poster encore et toujours :-)
Moi, je pensais au shell "classique" (*sh). Il me semble que ce n'est pas possible avec celui-ci
@++
Poster, poster encore et toujours :-)
Désirant à partir d'un PC Linux rapatrié régulièrement via FTP une des fichiers d'un autre PC, j'aimerais bien, dans la mesure du possible, avoir ton script.
Merci d'avance.
Adresse supprimée Modération CCM
Merci d'avance.
Adresse supprimée Modération CCM
la modestie ne t'étouffe pas, mais si tu lisais bien les demandes tu n'y réponds que très sommairement
en premier ton script ne focntionnera pas avec "by" au lieu de "Bye" c'est un détail !!
par contre entièrement d'accord sur l'astuce
et puis c'est plutot "binary" et "mget" pour récupérer des fichiers
il n'est pas récursif
ton astuce de déclarer dans .netrc fait que ton script ne fonctionne qu'à partir d'un client connu.
pour ceux qui sont intéressé je peux leur envoyer un script complet
utilisé par un serveur unix qui sauvegardait toutes les nuits des répertoires complet de 30 à 50 PC (il faut installé un serveur ftp sur le poste ex logiciel war-ftpd)
voir mon premier message
en premier ton script ne focntionnera pas avec "by" au lieu de "Bye" c'est un détail !!
par contre entièrement d'accord sur l'astuce
et puis c'est plutot "binary" et "mget" pour récupérer des fichiers
il n'est pas récursif
ton astuce de déclarer dans .netrc fait que ton script ne fonctionne qu'à partir d'un client connu.
pour ceux qui sont intéressé je peux leur envoyer un script complet
utilisé par un serveur unix qui sauvegardait toutes les nuits des répertoires complet de 30 à 50 PC (il faut installé un serveur ftp sur le poste ex logiciel war-ftpd)
voir mon premier message
laisse moi ton email et je t'envoie mon script avec une fonction récursive, (le programme gère tout seul la profondeur d'un répertoire) testé et utilisé entre un serveur unix et des PC sur un réseau WAN ayant un service ftp installlé (logiciel warftpd)
eric_fortique
Messages postés
9
Date d'inscription
samedi 8 mai 2004
Statut
Membre
Dernière intervention
12 mai 2004
Modifié le 6 sept. 2004 à 14:50
Modifié le 6 sept. 2004 à 14:50
Mon e-mail : Adresse supprimée Modération CCM
Merci aubertin pour votre aide .
Merci aubertin pour votre aide .
eric_fortique
Messages postés
9
Date d'inscription
samedi 8 mai 2004
Statut
Membre
Dernière intervention
12 mai 2004
12 mai 2004 à 02:00
12 mai 2004 à 02:00
Merci aubertin ,
j'essayerai de comprendre ton script,
il me parait tres difficile.
j'essayerai de comprendre ton script,
il me parait tres difficile.
bonjour SAM,
mais que veux tu en fait ? perso g mis les infos qu'il fallait pour le script en question, et sinon aubertin a fait un autre script apparemment plus compliqué, donc je vois pas trop ... ca ne te suffit pas ce que j'ai mis ??? demande a aubertin si c pas suffisant ou réexplique toi :)
cdlt,
scavenger
mais que veux tu en fait ? perso g mis les infos qu'il fallait pour le script en question, et sinon aubertin a fait un autre script apparemment plus compliqué, donc je vois pas trop ... ca ne te suffit pas ce que j'ai mis ??? demande a aubertin si c pas suffisant ou réexplique toi :)
cdlt,
scavenger
bonjour, je serai interresé par le script ftp récursif sous linux.
serait il possible de me l'envoyer à cette adresse Adresse supprimée Modération CCM
merci d'avance
serait il possible de me l'envoyer à cette adresse Adresse supprimée Modération CCM
merci d'avance
batmat
Messages postés
1871
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008
114
24 juin 2003 à 17:13
24 juin 2003 à 17:13
Je crois que cette question a malheureusement déjà été posée... :
On ne peut pas car ftp ne prend pas le mot de passe en option...
@++
Poster, poster encore et toujours :-)
On ne peut pas car ftp ne prend pas le mot de passe en option...
@++
Poster, poster encore et toujours :-)
pfff trop facile:
ftp -v machine <<FINLE
prompt
[type ascii]
[lcd repertoirelocal]
cd repertoiredistant
mput *
by
FINLE
et voila !!!!!!!!!!!!!!!!!!!!!
c tout naze, et ca suppose que le user qui envoi les fichiers est déclaré dans le .netrc de son répertoire home sinon on vous demandera un mot de passe et un user
==> ligne à rajouter dans le .netrc pour cofigurer un pass et un login automatique en rlogin ou en ftp:
machine xxxxx login yyyy password zzzzz
ftp -v machine <<FINLE
prompt
[type ascii]
[lcd repertoirelocal]
cd repertoiredistant
mput *
by
FINLE
et voila !!!!!!!!!!!!!!!!!!!!!
c tout naze, et ca suppose que le user qui envoi les fichiers est déclaré dans le .netrc de son répertoire home sinon on vous demandera un mot de passe et un user
==> ligne à rajouter dans le .netrc pour cofigurer un pass et un login automatique en rlogin ou en ftp:
machine xxxxx login yyyy password zzzzz
5 nov. 2003 à 12:08
5 nov. 2003 à 16:03
Modifié le 6 sept. 2004 à 14:50
Si c'est possible j'aimerais bien aussi l'avoir ce script...
Adresse supprimée Modération CCM
merci
Modifié le 6 sept. 2004 à 14:50
Désirant à partir d'un PC Linux rapatrié régulièrement via FTP une arborescence d'un autre PC, j'aimerais bien, dans la mesure du possible, avoir ton script.
Merci d'avance.
Adresse supprimée Modération CCM
Bernard
Modifié le 6 sept. 2004 à 14:50
Merci de m'envoyer le script... ça me ferait énormément plaisir.
---- > Adresse supprimée Modération CCM
Ciao.
Dasky