ChRiiS Posté(e) le 27 janvier 2008 Partager Posté(e) le 27 janvier 2008 Salut à tous, J'avais pas envie de créer un topic pour ça (et c'est pas super mouvementé sur IRC ) alors je me suis dis que le mieux pour trouver quelqu'un, c'était d'aller faire un tour au bar du coin Mais finalement je me suis rendu compte qu'un dimanche même au bar de la banquise, y'a personne Donc après 3 ou 4 mousses en solitaire à me cailler les miches, j'ai décider de venir ici au chaud Je me lance! En fait j'essaye de faire 2/3 trucs en bash depuis hier, mais je dois avouer que je maitrise pas encore vraiment la bête. Tout d'abords je vous explique le contexte. J'ai un répertoire qui contient plusieurs fichiers qui ont été "wget-é" depuis un même fichier. Ils se nomment donc blah.ext, blah.ext.1, blah.ext.2, [....], blah.ext.9, blah.ext.10, blah.ext.11 [...] bref vous connaissez le truc. Sachant aussi que la suite n'est pas "régulière", j'ai supprimé certains fichier (on peut passer de 11 à 58 par exemple). Ce que j'aimerais, c'est les renommer en une suite "régulière avec des zéros compensateur" (je sais que ça doit avoir un nom mais si je le connais il ne me reviens pas ). Je m'explique: si la liste va de blah.ext.1 à blah.ext.574 et qu'en tout il y a 412 fichiers, j'aimerais me retrouver avec: blah.ext.001 à blah.ext.412 si la liste va de blah.ext.1 à blah.ext.1259 et qu'en tout il y a 17 fichiers, j'aimerais me retrouver avec: blah.ext.01 à blah.ext.17 si la liste va de blah.ext.1 à blah.ext.748 et qu'en tout il y a 5 fichiers, j'aimerais me retrouver avec: blah.ext.1 à blah.ext.5 Je suis sur une Gutsy avec gnome (pour info), j'ai testé 2/3 softs type pyRenommer etc... mais mon soucis c'est que les regex c'est pas trop mon truc et que pour les blaireaux comme moi les autres options ne suffisent pas... Sinon, autre chose ces fichiers sont des jpg de 700*500 (sans exif) et j'aurais voulu savoir si c'était possible d'incruster (en bas à droite genre) le jour et l'heure (jj - xx:xx:xx). J'ai regarder du côté horodatage avec imagemagick mais j'ai pas trouvé grand chose. Et enfin pour finir j'ai fait un début de script censé se balader dans l'arbo, ça fais le job mais c'est un peu long, et surement fait avec les pieds pour le regard d'un expert. Toujours est-il que si vous pouvez me dire comment l'améliorer je suis preneur sinon encore une fois ça marche c'est déjà ça. L'arbo à cette gueule là: |-> Racine |-----> blah |---------> 01 |---------> 02 |---------> ... |---------> XX (inférieur à 16 pour le moment) |-----> blox |---------> 01 |---------> 02 |---------> ... |---------> XX (inférieur à 16 pour le moment) Et voici mon script: #!/bin/bash #On fais un peu de ménage (pour les tests seulements) clear #Sauvegarde du répertoire actuel chmb=`pwd` #Designe le répertoire de travail où l'argument $1 est le nom du sous-dossier dans lequel on veut travailler chm="/Racine/$1/" #Prépare le répertoire temporaire chmt="" #Prépare l'ajoute d'un zéro zer=0 #Si répertoire de travail existe if [ -d "$chm" ]; then #On y va cd "$chm" #Retourne le nombre de mots dans une liste des répertoires séparés par un espace (donc retourne le nombre de répertoires) nbr=`find -maxdepth 1 -type d | wc -w ` #Décrémente le compteur d'un (pour enlever le répertoire ./ du dossier) let "nbr-=1" #On commence une boucle de 1 à $nbr for ((i=01;i<=$nbr;i++)); do #Si $i est plus grand que 10 if [ "$i" -ge 10 ]; then #On enlève le zéro supplémentaire zer="" #Fin du test sur $i fi #On formatte le chemin comme il faut chmt=$chm$zer$i #Si le répertoire temporaire existe if [ -d "$chmt" ]; then #On y va cd "$chmt" #On dit qu'on y est! echo "On y est!" #Si le répertoire temporaire n'existe pas else #On précise qu'on ne le trouve pas echo -e "Chemin introuvable" #Fin du test sur le répertoire de temporaire fi #On sort de la boucle done #Si répertoire de travail n'existe pas else #On précise qu'on ne le trouve pas echo -e "Chemin introuvable" #Fin du test sur le répertoire de travail fi #On saute une ligne echo "" #On retourne au chemin de base cd "$chmb" Voili, voilà et un grand merci d'avance au(x) courageux qui (est/sont) arrivé(s) au bout (encore plus s'il(s) peu(vent/t) m'aider sur un des points)! Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 27 janvier 2008 Partager Posté(e) le 27 janvier 2008 Sinon, autre chose ces fichiers sont des jpg de 700*500 (sans exif) et j'aurais voulu savoir si c'était possible d'incruster (en bas à droite genre) le jour et l'heure (jj - xx:xx:xx). J'ai regarder du côté horodatage avec imagemagick mais j'ai pas trouvé grand chose. C'est faisable facilement avec imagemagik, je l'ai déjà fait par le passé.Et enfin pour finir j'ai fait un début de script censé se balader dans l'arbo, ça fais le job mais c'est un peu long, et surement fait avec les pieds pour le regard d'un expert. Toujours est-il que si vous pouvez me dire comment l'améliorer je suis preneur sinon encore une fois ça marche c'est déjà ça. nbr=`find -maxdepth 1 -type d | wc -w ` #Décrémente le compteur d'un (pour enlever le répertoire ./ du dossier) let "nbr-=1" Plus simple : ls -1 | wc -l Proposition d'algo : On part du chemin courant et on appelle la fonction principale : fonction : pour chaque fichier : si c'est un dossier : on appelle la fonction avec le nouveau dossier: sinon (c'est un fichier) on compte le nombre de fichier qui on le même patern (on enlève l'extention et on regarde ceux qui ont le même début) Calcul du nombre de 0 (ln x / ln 10) Renomage du fichier (rename + perl -e pour utiliser sprintf (%nd avec n nombre de 0) fin si fin pour fin fonction. Lien vers le commentaire Partager sur d’autres sites More sharing options...
ChRiiS Posté(e) le 28 janvier 2008 Auteur Partager Posté(e) le 28 janvier 2008 Bonsoir, Effectivement theocrite, l'horodatage est relativement simple à mettre en place, ça donne (dans mon cas) quelque chose comme ça: #on boucle sur toute les images for i in *jpg*; do #On récupère le jour j=`ls -l $i | tr -s ' ' | cut -d' ' -f"6" | cut -d'-' -f"3"` #On récupère le mois m=`ls -l $i | tr -s ' ' | cut -d' ' -f"6" | cut -d'-' -f"2"` #On récupère le heure h=`ls -l $i | tr -s ' ' | cut -d' ' -f"7"` #On formatte ça comme on veut txt=`echo "$j/$m-$h"` #On lance l'horodatage (attention ici on détruit l'image de base) convert "$i" -append -gravity SouthEast -pointsize 15 -background black -fill white -draw "text 10,0 '$txt'" "$i" #On sort de la boucle done Encore une fois, ça doit surement être un peu "tordu" mais ça fait le job... Sinon pour ton idée du "ls -1 | wc -l" le soucis c'est que ça compte aussi les fichiers et pas seulement les répertoires... Je reste sur l'ancienne pour l'instant. Pour la fonction récursive, par contre, je suis dessus mais je bloque pour compter le nombre de fichier ayant un patern commum... Mais je lâche pas l'affaire, merci encore à toi Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 28 janvier 2008 Partager Posté(e) le 28 janvier 2008 Sinon pour ton idée du "ls -1 | wc -l" le soucis c'est que ça compte aussi les fichiers et pas seulement les répertoires... Au temps pour moi, j'avais zappé le "-type d"Pour la fonction récursive, par contre, je suis dessus mais je bloque pour compter le nombre de fichier ayant un patern commum... Utilise % pour virer l'extension et ensuite fait un ls -1 ${var}* | wc -lOu alors tu stockes dans un tableau et tu regardes la taille. http://wooledge.org:8000/BashFAQ#head-5b33...d2fae2524351a9c http://wooledge.org:8000/BashFAQ#head-8eb3...cd140cc6cc6de66 Mais je lâche pas l'affaire, merci encore à toi Je t'en prie. Lien vers le commentaire Partager sur d’autres sites More sharing options...
ChRiiS Posté(e) le 28 janvier 2008 Auteur Partager Posté(e) le 28 janvier 2008 Whaou Géniaux ces liens, j'ai pas encore tout assimilé mais je m'y cogne, franchement merci beaucoup de ton aide!!! Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 29 janvier 2008 Partager Posté(e) le 29 janvier 2008 j'attends surtout avec impatience la solution en une ligne de sed par tuXXX (challenge, là ) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 29 janvier 2008 Partager Posté(e) le 29 janvier 2008 pour le renommage, qq idées function Pad0 { NB="$j" [ $j -le 99 ] && NB="0$j" [ $j -le 9 ] && NB="00$j" } le coeur : j=0; base="blah.ext"; for i in `ls $base.*`; do Pad0; mv $i $base.$NB; j=`expr $j + 1`; done c'était un post en coup de vent :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.