Script bash zenity copier des fichiers avec scp
xunil2003
Messages postés
830
Statut
Membre
-
zipe31 Messages postés 38797 Statut Contributeur -
zipe31 Messages postés 38797 Statut Contributeur -
Bonjour,
J'ai fait un script bash avec zenity pour copier des fichiers avec scp d'un pc a l'autre.
Voici le code :
Mais ça marche pas, il ne me demande pas le mot de passe de la connexion scp
Retour :
Vous constaterez que le retour affiche :
Je n'arrive pas à trouver d'où vient le problème ?
Merci.
J'ai fait un script bash avec zenity pour copier des fichiers avec scp d'un pc a l'autre.
Voici le code :
#!/bin/bash
echo "
+----------------------------------------------------+
| Copie de fichiers d'un ordinateur à l'autre |
| avec scp |
+----------------------------------------------------+
Ce script ne fonctionne pas, je n'arrive pas à trouver la raison ????
bash /home/laurent/bash/dernier/copie-de-fichiers-d-un-pc-a-un-autre-graph.sh"
titre="Copier un fichier en ssh"
CHOIX=`zenity --entry --title="$titre" --text="Selectionnez un choix : \n" "Copier un fichier de votre ordinateur vers un autre" "Copier un fichier d'un autre ordinateur vers le vôtre"`
echo "test : $CHOIX"
case $CHOIX in
"Copier un fichier de votre ordinateur vers un autre")
FICHIER_A_COPIER=`zenity --file-selection --filename /home/$USER/* --title="$titre" --text="Sélectionnez le fichier à copier sur l'autre ordinateur"`
case $? in
0)
echo "\"$FICHIER_A_COPIER\" est sélectionné.";;
1)
echo "Aucun fichier sélectionné.";;
-1)
echo "Une erreur inattendue est survenue.";;
esac
SSH=`if zenity --entry \
--title="$titre" \
--text="Veuillez indiquer votre connexion ssh \nExemple : root@192.168.0.5" \
--entry-text "root@192.168.0.5"
then echo $?
else echo "Pas de nom saisi"
fi`
echo "SSH : $SSH"
DESTINATION=`if zenity --entry \
--title="$titre" \
--text="Veuillez indiquer ou doit être copier le fichier sur l'autre ordinateur \nExemple : /root/Bash/" \
--entry-text "/root/Bash/"
then echo $?
else echo "Pas de nom saisi"
fi`
echo "DESTINATION : $DESTINATION"
echo "scp $FICHIER_A_COPIER $SSH:$DESTINATION"
scp $FICHIER_A_COPIER $SSH:$DESTINATION
echo "DESTINATION : $DESTINATION"
;;
"Copier un fichier d'un autre ordinateur vers le vôtre")
;;
esac
echo
Mais ça marche pas, il ne me demande pas le mot de passe de la connexion scp
Retour :
laurent@Laurent-Bureau:~$ bash /home/laurent/bash/dernier/copie-de-fichiers-d-un-pc-a-un-autre-graph.sh
+----------------------------------------------------+
| Copie de fichiers d'un ordinateur à l'autre |
| avec scp |
+----------------------------------------------------+
Ce script ne fonctionne pas, je n'arrive pas a trouver la raison ????
bash /home/laurent/bash/dernier/copie-de-fichiers-d-un-pc-a-un-autre-graph.sh
(zenity:8209): Gdk-CRITICAL **: gdk_device_ungrab: assertion 'GDK_IS_DEVICE (device)' failed
(zenity:8209): Gtk-CRITICAL **: gtk_device_grab_remove: assertion 'GDK_IS_DEVICE (device)' failed
(zenity:8209): Gdk-CRITICAL **: gdk_device_ungrab: assertion 'GDK_IS_DEVICE (device)' failed
(zenity:8209): Gtk-CRITICAL **: gtk_device_grab_remove: assertion 'GDK_IS_DEVICE (device)' failed
test : Copier un fichier de votre ordinateur vers un autre
"/home/laurent/bash/vera/box2/sms-groupe_Everspring_SF812_couloir-1E_detecteur-fume.sh" est sélectionné.
SSH : root@192.168.0.5
0
DESTINATION : /root/Bash/
0
scp /home/laurent/bash/vera/box2/sms-groupe_Everspring_SF812_couloir-1E_detecteur-fume.sh root@192.168.0.5
0:/root/Bash/
0
0: No such file or directory
DESTINATION : /root/Bash/
0
laurent@Laurent-Bureau:~$
Vous constaterez que le retour affiche :
scp /home/laurent/bash/vera/box2/sms-groupe_Everspring_SF812_couloir-1E_detecteur-fume.sh root@192.168.0.5sans afficher la destination de la copie sur l'autre pc, la variable "$DESTINATION" passe pas :
echo "scp $FICHIER_A_COPIER $SSH:$DESTINATION"
Je n'arrive pas à trouver d'où vient le problème ?
Merci.
A voir également:
- Script bash zenity copier des fichiers avec scp
- Renommer des fichiers en masse - Guide
- Script vidéo youtube - Guide
- Comment copier une vidéo youtube - Guide
- Super copier - Télécharger - Gestion de fichiers
- Fichiers epub - Guide
4 réponses
scp /home/laurent/bash/vera/box2/sms-groupe_Everspring_SF812_couloir-1E_detecteur-fume.sh root@192.168.0.5
Il manque le
:à la fin de la destination. Si tu l'omets cela signifie que tu fais ta copie vers le fichier
root@192.168.0.5ce qui n'est pas ce que tu veux.
Plus généralement la syntaxe est (avec [...] qui signifie "optionnel") :
scp [-r] chemin_a chemin_b
... où un chemin est :
[[login@]machine:]chemin
Note que cette syntaxe permet donc à une machine C de faire un transfert de A à B, à un machine A d'uploader un fichier sur B, ou à une machine A de télécharger un fichier depuis B selon la manière dont tu l'invoques. Plus de détails :
man scp
Bonne chance
Bonsoir,
Etês vous sûre, car j'ai remplacé à la fin :
par
Retour :
Il y a "0:" à la place de la destination ?
Et il ne reconnaît pas le mot de passe quand je le tape ?
Merci.
Etês vous sûre, car j'ai remplacé à la fin :
echo "scp $FICHIER_A_COPIER $SSH:$DESTINATION"
scp $FICHIER_A_COPIER $SSH:$DESTINATION
echo "DESTINATION : $DESTINATION"
par
commande="scp [-r] $FICHIER_A_COPIER $SSH:$DESTINATION:"
echo $commande
$commande
echo "DESTINATION : $DESTINATION"
Retour :
laurent@Laurent-Bureau:~$ bash /home/laurent/bash/dernier/copie-de-fichiers-d-un-pc-a-un-autre-graph.sh
+----------------------------------------------------+
| Copie de fichiers d'un ordinateur à l'autre |
| avec scp |
+----------------------------------------------------+
Ce script ne fonctionne pas, je n'arrive pas a trouver la raison ????
bash /home/laurent/bash/dernier/copie-de-fichiers-d-un-pc-a-un-autre-graph.sh
(zenity:9435): Gdk-CRITICAL **: gdk_device_ungrab: assertion 'GDK_IS_DEVICE (device)' failed
(zenity:9435): Gtk-CRITICAL **: gtk_device_grab_remove: assertion 'GDK_IS_DEVICE (device)' failed
(zenity:9435): Gdk-CRITICAL **: gdk_device_ungrab: assertion 'GDK_IS_DEVICE (device)' failed
(zenity:9435): Gtk-CRITICAL **: gtk_device_grab_remove: assertion 'GDK_IS_DEVICE (device)' failed
test : Copier un fichier de votre ordinateur vers un autre
"/home/laurent/09-off.wav" est sélectionné.
SSH : root@192.168.0.5
0
DESTINATION : /root/Bash/
0
scp [-r] /home/laurent/09-off.wav root@192.168.0.5 0:/root/Bash/ 0:
laurent@0's password:
Permission denied, please try again.
laurent@0's password:
Permission denied, please try again.
laurent@0's password:
Permission denied (publickey,password).
lost connection
DESTINATION : /root/Bash/
0
laurent@Laurent-Bureau:~$
Il y a "0:" à la place de la destination ?
scp [-r] /home/laurent/09-off.wav root@192.168.0.5 0:/root/Bash/ 0:
Et il ne reconnaît pas le mot de passe quand je le tape ?
Merci.
Non tu n'as pas bien compris ce que j'ai voulu écrire.
A) Pré-requis :
Pour information quand tu lis un man, par exemple
Regarde par exemple
Dans le cas de
... du coup son synopsis serait :
Dans le cas de
- un chemin local continue à s'écrire "normalement"
- un chemin sur une machine distante doit comporter les informations pour faire la connexion ssh vers cette machine (donc le login et le nom de machine). Si le login est omis, c'est sous-entendu le résultat de la commande
B) Quelques exemples avec scp
Ils seront peut-être plus claire que la syntaxe avec des crochets.
1) Upload (fichier / dossier) :
Cas particulier : upload dans
Upload de plusieurs fichiers :
Upload de plusieurs répertoires :
2) Download
En gros, c'est la même chose mais dans l'autre sens.
Cas particulier : download dans le répertoire courant :
On peut aussi downloader plusieurs fichiers/dossiers.
3) Transfert (depuis ta machine, de A vers B)
J'espère que c'est plus clair.
C) Si tu es bloqué
N'hésite pas à demander des précisions en cas de besoin. Si tu es bloqué, reporte-moi la commande scp (sans les variables shells), sa valeur exacte. Pour ce faire, tu peux modifier ton script pour qu'il affiche la commande qu'il va exécuter.
Exemple :
Bonne chance
A) Pré-requis :
Pour information quand tu lis un man, par exemple
man scp, quand quelque chose est écrit entre crochet il ne faut pas les réécrire : cela signifie que ce qui est entre crochet peut être ou ne pas être écrit dans ta commande (en fonction de tes besoins). C'est notamment le cas des options.
Regarde par exemple
man ls: tu sais que tu peux écrire
ls -lou
ls -aou encore
ls -a -lou encore
ls -al. Si ls se limitait à ces deux options, son synopsis dans le man serait alors :
ls [-al] [chemin]
Dans le cas de
lstu peux même écrire plusieurs fichiers à la suite :
ls /home/toto /home/tata
... du coup son synopsis serait :
ls [-al] [chemin...]
Dans le cas de
cptu peux copier n fichiers vers 1 destination donc le synopsis ressemble à :
cp [-r] chemin_sources... chemin_destinatoin
scpsuit la même convention : tu peux copier n sources vers 1 destination, et chacun de ces paramètres peuvent correspondre à un fichier/dossier local à la machine ou sur une machine distante. La syntaxe de
scprequiert donc de pouvoir exprimer ces deux types de chemins. Ainsi :
- un chemin local continue à s'écrire "normalement"
- un chemin sur une machine distante doit comporter les informations pour faire la connexion ssh vers cette machine (donc le login et le nom de machine). Si le login est omis, c'est sous-entendu le résultat de la commande
whoami.
B) Quelques exemples avec scp
Ils seront peut-être plus claire que la syntaxe avec des crochets.
1) Upload (fichier / dossier) :
scp /home/toto/mon/fichier loginA@machineA:/chemin/sur/a
scp -r /home/toto/dossier loginA@machineA:/chemin/sur/a
Cas particulier : upload dans
/home/loginA:
scp /home/toto/mon/fichier loginA@machineA:/home/loginA
scp /home/toto/mon/fichier loginA@machineA:
Upload de plusieurs fichiers :
scp fichier1 fichier2 fichier3 loginA@machineA:/home/loginA
Upload de plusieurs répertoires :
scp -r dossier1 dossier2 dossier3 loginA@machineA:/home/loginA
2) Download
En gros, c'est la même chose mais dans l'autre sens.
scp loginA@machineA:/mon/fichier/sur/a /home/toto/mon/fichier
scp -r loginA@machineA:/mon/dossier/sur/a /home/toto/dossier
Cas particulier : download dans le répertoire courant :
scp loginA@machineA:/chemin/sur/a .
On peut aussi downloader plusieurs fichiers/dossiers.
3) Transfert (depuis ta machine, de A vers B)
scp loginA@machineA:/fichier/sur/a loginB@machineB:/fichier/sur/b
scp -r loginA@machineA:/dossier/sur/a loginB@machineB:/dossier/sur/b
J'espère que c'est plus clair.
C) Si tu es bloqué
N'hésite pas à demander des précisions en cas de besoin. Si tu es bloqué, reporte-moi la commande scp (sans les variables shells), sa valeur exacte. Pour ce faire, tu peux modifier ton script pour qu'il affiche la commande qu'il va exécuter.
Exemple :
cmd="scp -r $login_src@$machine_src:$chemin_src /home/toto"
echo $cmd
eval $cmd
Bonne chance
Salut,
et
Ta syntaxe n'est pas bonne, le résultat donne bien l'adresse de ton serveur, mais aussi le résultat du code retour, d'où l'erreur ;-(
SSH=`if zenity --entry \
--title="$titre" \
--text="Veuillez indiquer votre connexion ssh \nExemple : root@192.168.0.5" \
--entry-text "root@192.168.0.5"
then echo $?
else echo "Pas de nom saisi"
fi`
echo "SSH : $SSH"
et
(zenity:8209): Gtk-CRITICAL **: gtk_device_grab_remove: assertion 'GDK_IS_DEVICE (device)' failed
test : Copier un fichier de votre ordinateur vers un autre
"/home/laurent/bash/vera/box2/sms-groupe_Everspring_SF812_couloir-1E_detecteur-fume.sh" est sélectionné.
SSH : root@192.168.0.5
0
DESTINATION : /root/Bash/
0
Ta syntaxe n'est pas bonne, le résultat donne bien l'adresse de ton serveur, mais aussi le résultat du code retour, d'où l'erreur ;-(