IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Renommage numérique sous ssh


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 118
    Par défaut Renommage numérique sous ssh
    Bonjour à tous,

    Je cherche à intégrer une portion de script qui permet de renommer des fichiers images par une séquence numérique....1, 2, 3, etc...
    Le script initial est un script qui prends des photos (raspi) toutes les 3 à 5sec pour en faire une vidéo timelapse... transfert en ssh des photos sur un NAS (faute de place sur le raspi) ...ok et bug sur le renommage dont je n'arrive pas à capter l'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
          ssh -p 2202 admin@kube cd $sshDirOrig/$currentDate && echo "Déplacement au dossier ..... Ok" && typeset -i i && i=1 &&
              for img in `ls -a | grep jpg`; do
                       mv $img ${i}.jpg;
                       i=$i+1;
                       echo $i;
               done && echo "Renommage numérique ..... Ok"
    A noter que les dossiers existent bien et que la connection ssh est valide.

    Merci pour votre aide.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Décembre 2013
    Messages : 70
    Par défaut
    Salut,

    Je n'ai pas testé mais je pense qu'il faut faire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ssh -p 2202 admin@kube 'cd "$sshDirOrig/$currentDate" && echo "Déplacement au dossier ..... Ok" && typeset -i i && i=1 && for img in *.jpg; do mv "$img" "${i}.jpg"; i=$i+1; echo $i; done && echo "Renommage numérique ..... Ok"'

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 118
    Par défaut
    Merci de ton aide.

    J'avais déjà essayé mais cela n'a pas marché. Je viens d'essayer:


    ssh -p 2202 admin@kube 'cd "$sshDirOrig/$currentDate" && echo "Déplacement au dossier ..... Ok" && typeset -i i && i=1 && for img in *.jpg; do mv "$img" "${i}.jpg"; i=$i+1; echo $i; done && echo "Renommage numérique ..... Ok"'
    il me revoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ./timelapse.sh
    Déplacement au dossier ..... Ok
    mv: cannot stat '*.jpg': No such file or directory
    2
    Renommage numérique ..... Ok
    ???
    Apparemment, on est pas dans le bon dossier, le "cd" ne passe pas !!!

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 118
    Par défaut
    Ok.... !
    en fait c'est mes variables $sshDirOrig et $currentDate qui passent pas. Ok si je met le chemin en natif.

    Comment faire pour avoir les variables en ssh ?

  5. #5
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    en échappant le dollar : \$sshDirOrig et \$currentDate.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 118
    Par défaut
    Super ...merci.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 118
    Par défaut
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ssh -p 2202 admin@kube 'ls "\$sshDirOrig/\$currentDate"'
    ne marche pas.

  8. #8
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    mais elles sortent d'où ces variables ? elles sont initialisées en local avant le ssh ? elles sont dans l'environnement global de la machine distante ?

    je te propose un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ sshDirOrig=machin
    $ currentDate=truc
    $ ssh -p2202 admin@kube "
    > cd $sshDirOrig/$currentDate/                                    # variables locales donc interprétées localement par le shell avant de donner la chaine à ssh
    > i=1
    > for img in *.jpg; do                                            # bien mieux qu'un `ls | grep`
    >    echo \"renommage de \\\"\$img\\\" en \\\"\$i.jpg\\\"\"       # ici c'est le contraire, img et i sont des variables distantes, donc on les escape
    >    ((i++))                                                      # on incremente
    > done
    > "
    tu remarqueras que c'est la fête aux échappements, il y a les guillemets de ssh, il y a les guillements de echo qu'on échappe une fois, et dans le echo il y a les guillemets "pour faire joli" qu'on échappe trois fois, pourquoi ? parceque \\ et \$ une fois intérprétés donnent à nouveau \$ lui même échappé, et qui devra donc être interprété à son tour
    et à chaque fois qu'on utilise une variable définie à l'autre bout, on échappe le dollar

    c'est pas hyper compliqué mais ça demande un peu de pratique et d'habitude.

  9. #9
    Membre éprouvé Avatar de RaphaelG
    Homme Profil pro
    Amateur
    Inscrit en
    Juin 2016
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Juin 2016
    Messages : 94
    Par défaut
    Ce serait plus simple si on utilisait NFS ou CIFS au lieu de SSH.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 118
    Par défaut
    Wouaaaaawou ! Merci pour la leçon ! Super sympa. Je vais tacher de mettre en pratique tout ça.

    Si non, le script entier (Je pense que tu vas rire !!!)... je pense qu'il doit y avoir plus simple mais bon ça a l'air de marcher...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
      1 #/bin/bash
      2 
      3 # Définition des variables
      4 saveDir=/home/pi/script
      5 sshDirOrig=/volume1/photo/timelapse
      6 sshDirDest=/volume1/home_video/timelapse
      7 startHour=53000         # Enregistrement à partir de 5h30.
      8 stopHour=223000         # Fin à 22H:30
      9 
     10 # Debug
     11 #echo -e "\033[37mDate du jour : \033[32m$currentDate"
     12 #echo -e "\033[37mHeure actuelle : \033[32m$currentHour"
     13 #echo -e "\033[37mDébut enregistrement : \033[32m$startHour"
     14 #echo -e "\033[37mFin enregistrement : \033[32m$stopHour"
     15 #echo -e "\033[37mFin enregistrement : \033[32m$sshDirOrig"
     16 #echo -e "\033[37mFin enregistrement : \033[32m$sshDirDest"
     17 
     18 # Lancement des commandes sur une boucle infinie
     19 while true; do
     20 
     21     currentDate=$(date +%Y_%m_%d)
     22     # Mise en place des variables qui permettent de numéroter les pages
     23     #typeset -i i
     24     #i=1;
     25 
     26     # Création du dossier images du jour s'il n'existe pas déjà
     27     ssh -p 2202 admin@kube mkdir -p $sshDirOrig/$currentDate
     28 
     29     # Enregistrement des images du jour
     30     while [ $(date +%H%M%S) -ge $startHour ] && [ $(date +%H%M%S) -le $stopHour ]; do
     31             fileName=$(date +"%Y%m%d%H%M%S").jpg
     32             /opt/vc/bin/raspistill -vf -hf -o $saveDir/$fileName
     33             scp -P 2202 $fileName admin@kube:$sshDirOrig/$currentDate
     34             rm $fileName
     35              sleep 5;
     36     done
     37 
     38     # Création du fichier video
     39 ssh -p 2202 admin@kube 'cd "\$sshDirOrig/\$currentDate && echo "Déplacement au dossier ..... Ok" && typeset -i i && i=1 && for img in *.jpg; do mv "$img" "${i}.jpg"; i=$i+1;     echo $i; done && echo "Renommage numérique ..... Ok"'
     40 break;
     41 #    ssh -p 2202 admin@kube cd $sshDirOrig/$currentDate && echo "Déplacement au dossier ..... Ok" && typeset -i i && i=1 &&
     42 #       for img in `ls -a | grep jpg`; do 
     43 #               mv $img ${i}.jpg;
     44 #               i=$i+1;
     45 #               echo $i; 
     46 #       done && echo "Renommage numérique ..... Ok"
     47 # &&
     48 #       /usr/bin/ffmpeg -r 15 -start_number 1 -i %d.jpg -s 1920x1080 -vcodec libx264 $currentDate.mp4 && echo "Création du fichier vidéo ..... Ok" &&
     49 #       mv $currentDate.mp4 $sshDirDest/$currentDate.mp4 && echo "Déplacement du fichier vidéo ..... Ok"'
     50 
     51 # ou avec mencoder
     52   # Céation du listing
     53   # ls *.jpg > list.txt &
     54   # Création du fichier vidéo avec mencoder
     55   #mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:aspect=16/9:vbitrate=8000000 -vf scale=1920:1080 -o $currentDate.avi -mf type=jpeg:fps=24 mf://@list.txt
     56 
     57 
     58   # rm -Rf $sshDirOrig
     59 
     60 done;

  11. #11
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    effectivement avec un partage NFS ou même SSHFS tu te simplifierai beaucoup la vie (l'avantage de sshfs c'est que t'as besoin de rien de plus sur le RPI c'est juste côté client qu'il faut installer le bon tool)

    ton premier while true; do; ...; break; done ne sert à rien, si tu break sans condition autant faire sauter le while

    ta variable startHour n'est pas définie correctement

  12. #12
    Membre éprouvé
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Décembre 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Décembre 2013
    Messages : 70
    Par défaut
    Salut,
    En modifiant légèrement ma première proposition pour que le "cd" passe avec les variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ssh -p 2202 admin@kube "cd '$sshDirOrig/$currentDate'"' && echo "Déplacement au dossier ..... Ok" && typeset -i i && i=1 && for img in *.jpg; do mv "$img" "${i}.jpg"; i=$i+1; echo $i; done && echo "Renommage numérique ..... Ok"'

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 118
    Par défaut
    En fait, je passe par ssh car je trouve que c'est plus simple question config... excepté dans un script, effectivement.
    Le client est un Nas Synology... donc je ne peux pas y installer n'importe quoi.

    @BufferBob : le "break" est juste là pour sortir de la boucle. Je ne le laisserai pas dans le script final. Je voudrais que le script se mette en "stand by" après le traitement des photos => renommage => vidéo timelapse et qu'il redémarre la boucle si l'heure repasse sur les 5h30. D'ailleurs, pourquoi dis-tu que $startHour est mal définie ?
    5H30 cela fait bien 53000, non ? ou 053000 ?

    Script en attente, car modification du tableau électrique /Réseau sur lequel est branché le raspi.
    @Postmortem : merci; je testerai par la suite

  14. #14
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par krislec Voir le message
    En fait, je passe par ssh car je trouve que c'est plus simple (...) Le client est un Nas Synology... donc je ne peux pas y installer n'importe quoi.
    c'est pour ça que je te parlais de sshfs, la seule chose à installer est côté client

    pourquoi dis-tu que $startHour est mal définie ?
    5H30 cela fait bien 53000, non ?
    oui en effet, au temps pour moi

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/07/2008, 15h45
  2. Créer un compte FTP sous SSH
    Par whitespirit dans le forum Réseau
    Réponses: 2
    Dernier message: 04/07/2008, 14h14
  3. tri non numérique sous excel
    Par phoque.r dans le forum Excel
    Réponses: 1
    Dernier message: 23/04/2007, 13h59
  4. Réponses: 8
    Dernier message: 10/02/2007, 03h44
  5. Avertissement authentification sous ssh
    Par jean-jacques varvenne dans le forum Réseau
    Réponses: 5
    Dernier message: 12/01/2005, 16h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo