nexius2 Posté(e) le 10 octobre 2014 Partager Posté(e) le 10 octobre 2014 (modifié) hello, je cherche a faire un script qui renomme mes photos fonction de la date de prise de vue, ca, j'ai trouvé. je cherche également a faire en sorte qu'un fichier ayant déjà un nom correct ne soit pas renommer. autrement dit, si le debut du fichier correspond a la date de prise de vue, on renomme pas. il en va de soit qu'a chaque renommage, il ne doit pas ecraser un fichier déjà existant ! voici ce que j'ai... je doit pas etre loin mais.... #!/bin/sh rep=/volume1/NetBackup/test/ LOG_FILE=/volume1/NetBackup/PhotoStation.rename.file.sh.log { find "$rep" -name "*.jpg" ! -path "*/#recycle/*" ! -path "*/@*" | while read line do # recuperation de la date du fichier IFS=': ' set $(exiv2 -g Exif.Image.DateTime -Pv "$line") unset IFS year=$1 month=$2 day=$3 hour=$4 minute=$5 second=$6 #on recuper le nom du fichier filename=${fullfilename%.*} # on test si le fichier porte deja un nom correct if [$filename -ne "$1-$2-$3_$4-$5-$6*"] then # on renomme le fichier exiv2 -Fr "%Y-%m-%d_%H-%M-%S" "$line"; # essayer avec :parentname fi done } >& $LOG_FILE Modifié le 13 octobre 2014 par nexius2 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gaetan.cambier Posté(e) le 10 octobre 2014 Partager Posté(e) le 10 octobre 2014 Remplace : %Y-%m-%d_%H-%M-%S Par : $1-$2-$3_$4-$5-$6 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 11 octobre 2014 Auteur Partager Posté(e) le 11 octobre 2014 non, c'est au niveau du test du fichier que ca merdouille.... le renommage est bon, mais il ne doit se faire que si le nom du fichier ne commence pas par $1-$2-$3_$4-$5-$6 et je pense que c'est "filename" qui est pas bon pour recuperer le nom du fichier... 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 11 octobre 2014 Partager Posté(e) le 11 octobre 2014 (modifié) Je me demande de quel chapeau sort ce "fullfilename" De plus le formalisme ${nom%.*} est typiquement (et peut être exclusivement) Korn shell **edit** Au temps pour moi, je constate sur sa man page que ash (qui est le shell de DSM) connait ce formalisme. Mais reste ma question sur la variable "fullfilename" Modifié le 11 octobre 2014 par CoolRaoul 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 11 octobre 2014 Auteur Partager Posté(e) le 11 octobre 2014 (modifié) Justement, j'ai vu qu'elle existait, mais j'arrive pas a m'en servir... :-) Mais je vais tester ${nom%.*} Modifié le 11 octobre 2014 par nexius2 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 11 octobre 2014 Partager Posté(e) le 11 octobre 2014 Justement, j'ai vu qu'elle existait, mais j'arrive pas a m'en servir... :-) Une variable shell n'apparait pas ainsi par miracle, elle doit bien être affectée quelque part et je ne vois rien dans la boucle "while" qui positionne le contenu de cette variable. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 11 octobre 2014 Auteur Partager Posté(e) le 11 octobre 2014 j'avais ca : filename=${fullfilename%.*} 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 11 octobre 2014 Partager Posté(e) le 11 octobre 2014 j'avais ca : filename=${fullfilename%.*} Ca c'est l'affectation de la variable "filename", moi c'est sur "fullfilename" que je me pose des questions, comment peut-elle prendre une valeur? Ensuite faudra que tu explique ce que tu veux faire par le test: if [$filename -ne "$1-$2-$3_$4-$5-$6*"] le "*" à l'intérieur des quotes va être interprété littéralement, pas comme un wildcard 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 11 octobre 2014 Auteur Partager Posté(e) le 11 octobre 2014 ah oui, exact, pas de fullfilname.... avec le if, j'essai de verifier si le nom du fichier est different de "$1-$2-$3_$4-$5-$6*" qui normalement, est la date du fichier, donc potentiellement le debut du nom du fichier... 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 11 octobre 2014 Partager Posté(e) le 11 octobre 2014 attend quelques minutes je teste les correction du script et je te montre ça 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 11 octobre 2014 Partager Posté(e) le 11 octobre 2014 (modifié) La ca m'a l'air bon: #!/bin/ash PATH=/bin:/usr/bin:/usr/syno/bin # important si lancé en cron rep=~/tmp/A_Classer # /volume1/NetBackup/test/ LOG_FILE=/volume1/NetBackup/PhotoStation.rename.file.sh.log # creation fichier log si stdout n'est pas un tty [ -t 2 ] || exec > $LOG_FILE 2>&1 find "$rep" -name "*.jpg" ! -path "*/#recycle/*" ! -path "*/@*" | while read line do #on recupere le nom "court" du fichier filename=${line##*/} filename=${filename%.*} # recuperation de la date du fichier IFS=': ' set $(exiv2 -g Exif.Image.DateTime -Pv "$line") unset IFS year=$1 month=$2 day=$3 hour=$4 minute=$5 second=$6 # on test si le fichier porte deja un nom correct case $filename in "$1-$2-$3_$4-$5-$6"*) # le nom est OK echo "not renaming $line" >&2 ;; *) echo "renaming $line" >&2 exiv2 mv -fF -r "%Y-%m-%d_%H-%M-%S" "$line"; # essayer avec :parentname ;; esac done Notes: le "case" a la place du test ([ "$truc" -eq "machin" ]) car les wildcards ("*") ne sont pas supportés ici. affectation du PATH pour s'assurer de la visibilité de la commande "exiv2" Modifié le 11 octobre 2014 par CoolRaoul 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 11 octobre 2014 Partager Posté(e) le 11 octobre 2014 (modifié) avec le if, j'essai de verifier si le nom du fichier est different de "$1-$2-$3_$4-$5-$6*" qui normalement, est la date du fichier, donc potentiellement le debut du nom du fichier... Le test ([ ... ]) des shell sh, ash et bash ne tient pas compte des "*" et "?" et les traite comme des caractères normaux. Seul le korn shell (ksh) supporte cela, sous réserve d'utiliser le format étendu avec doubles crochets: [[ ... ]] et de sortir les caractères jokers des quotes. Modifié le 11 octobre 2014 par CoolRaoul 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 11 octobre 2014 Auteur Partager Posté(e) le 11 octobre 2014 (modifié) pas bete le coup du case....j e note pour le "*"... l'univers windows... :-) par contre, il a l'air de s'arreter apres le premier dossier traité... si je met juste ce code, ca marche bien pour tout les dossiers.... { find "$rep" -name "*.jpg" ! -path "*/#recycle/*" ! -path "*/@*" | while read line do exiv2 -Fr "%Y-%m-%d_%H-%M-%S" "$line"; # essayer avec :parentname done } >& $LOG_FILE pourquoi un mv apres le exiv2? Modifié le 11 octobre 2014 par nexius2 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 11 octobre 2014 Partager Posté(e) le 11 octobre 2014 (modifié) pas bete le coup du case.... par contre, il a l'air de s'arreter apres le premier dossier traité... Je ne vois pas de raison pour cela, c'est le "find" qui assure le parcours si je met juste ce code, ca marche bien pour tout les dossiers.... { find "$rep" -name "*.jpg" ! -path "*/#recycle/*" ! -path "*/@*" | while read line do exiv2 -Fr "%Y-%m-%d_%H-%M-%S" "$line"; # essayer avec :parentname done } >& $LOG_FILE je ne trouve pas de différence de fond avec mon code pourquoi un mv apres le exiv2? J'avoue découvrir cette commande ("exiv2") et j'ai utilisé son aide en ligne pour comprendre comment l'utiliser: fserv> exiv2 -h Usage: exiv2 [ options ] [ action ] file ... Manipulate the Exif metadata of images. Actions: /../ mv | rename Rename files and/or set file timestamps according to the Exif create timestamp. The filename format can be set with -r format, timestamp options are controlled with -t and -T. Modifié le 11 octobre 2014 par CoolRaoul 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 11 octobre 2014 Auteur Partager Posté(e) le 11 octobre 2014 oui, j'utilise exiv2 puisque c'est dispo, a defaut d'avoir exiftool.... et j'ai trouvé.... en fait, c'est de ma faute... il ne renome pas s'il n'y a pass de date exif dans le fichier (normal) et j'avais mis des fichier de ce type afin de tester.... donc je continue mes test, mais ca a l'air nickel ! merci je lache un peu avant que madame rale et prochaine etape, loger les fichier non traité. encore merci 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 11 octobre 2014 Partager Posté(e) le 11 octobre 2014 (modifié) Super, bon courage pour la suite alors. **EDIT*** et au passage merci de m'avoir fait découvrir la présence sur DSM de cette commande "exiv2" que j'ignorais Modifié le 11 octobre 2014 par CoolRaoul 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 13 octobre 2014 Auteur Partager Posté(e) le 13 octobre 2014 (modifié) pour ceux que ca interesse: http://www.nas-forum.com/forum/files/go/372f4ecea37d7d622bcd8a745dff7f0a/photostationrenamefile edit: on peut pas changer le titre du sujet? histoire que ce soit plus claire pour le suivit du script... et peut etre aussi le deplacer dasn photostation... Modifié le 13 octobre 2014 par nexius2 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 13 octobre 2014 Partager Posté(e) le 13 octobre 2014 on peut pas changer le titre du sujet? histoire que ce soit plus claire pour le suivit du script... C'est à toi de le faire en tant qu'initiateur du fil. Fait que tu passes en modification sur le premier post, puis passer en mode "éditeur complet" et la tu aura la possibilité d'éditer le titre. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 16 octobre 2014 Auteur Partager Posté(e) le 16 octobre 2014 hello, file n'existant pas sur nos Syno, est ce que quelqu'un aurait une idée pour recupérer les infos mime d'un fichier? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 16 octobre 2014 Partager Posté(e) le 16 octobre 2014 (modifié) N'est-il pas plus simple de faire confiance à l'extension du fichier que d'analyser une partie de son contenu? Exemple en shell (un peu bourrin je reconnais): http://pastebin.com/Z5S2LL8J Modifié le 16 octobre 2014 par CoolRaoul 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 16 octobre 2014 Auteur Partager Posté(e) le 16 octobre 2014 j'y pensais, mais je trouvais ca nettement plus sympa d'avoir une liste de mime plutot qu'une liste d'extensions... ils sont chiant a emputer l'OS d'autant d'utilitaire.... 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 16 octobre 2014 Partager Posté(e) le 16 octobre 2014 (modifié) j'y pensais, mais je trouvais ca nettement plus sympa d'avoir une liste de mime plutot qu'une liste d'extensions... ils sont chiant a emputer l'OS d'autant d'utilitaire.... Bof ... même sous Windows il n'y a jamais eu en standard, d'équivalent de la commande unix "file": la aussi c'est l'extension qui fait foi et on se débrouille très bien sans après tout. **EDIT** Sous DSM on peut s'aider du fichier "/usr/syno/etc/mimetypes.txt" pour simplifier radicalement le script que j'ai donné en exemple (à coup de sed et/ou awk) Modifié le 16 octobre 2014 par CoolRaoul 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 16 octobre 2014 Auteur Partager Posté(e) le 16 octobre 2014 pas mal... mais ca ressemble a un oublie d'un truc utilisé avant puis abandonné.... en cherchant dans l'os, j'ai trouver des doc de DSM 3, des lien symbolique mort et le fait qu'avant il y avait exiftool d'implanté avant d'etre remplacer par exiv2 me donne pas super confiance dans ce genre de fichier. mais l'idée me va... j'vais voir pour faire un fichier contenant les extentions supporté de l'inclure dans le find. ou alors est ce que ca vaut pas le coup de chercher a faire une interface graphique? je constante qu'il n'y a pas de package la dessus... 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
CoolRaoul Posté(e) le 16 octobre 2014 Partager Posté(e) le 16 octobre 2014 est ce que ca vaut pas le coup de chercher a faire une interface graphique? Ah, je ne serais pas de bon conseil sur ce point, étant un vieux de la vielle, qui pratique Unix à l'ancienne, tout en ligne de commande. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
nexius2 Posté(e) le 23 octobre 2014 Auteur Partager Posté(e) le 23 octobre 2014 pour l''instant, je reste sur du script, on verra plus tard... du coup, voila la version 0.51 http://www.nas-forum.com/forum/files/get/e7d17fb7f7504ebd860e2753c7ef7c87/736-PhotoStation.rename.file.sh.zip PS: ya pas un admin dans le coin pour remettre ce sujet dans la bonne section? Merci 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.