Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 30/09/2011, à 11:36

Coeur Noir

Copier X fois une image, en renommer ses copies de 001 à X

Bonjour !

Oui cela peut paraître bizarre de vouloir copier 240 fois la même image, pour obtenir un dossier contenant des fichiers nommés 001.tif 002.tif 003.tif (...) 240.tif
(240 et .tif ne sont que des exemples)

Mais c'est bien ce dont j'ai besoin...

Je suppose qu'il sera question de

cp

rename

Si vous pouviez me dépanner de deux façons : la commande à éxécuter d'une part mais surtout des liens vers sites ou bouquins pour apprendre à combiner ces commandes...

Bien cordialement...


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#2 Le 30/09/2011, à 11:42

tirom14

Re : Copier X fois une image, en renommer ses copies de 001 à X

 for i in ´seq 240´; do cp mon_image "$i.tif"; done 


seq 240, renvoi 240 ligne, numéroté de 1 à 240,
for, execute "cp mon_image "$i.tif", plusieurs fois.
A chaque fois, i prend la valeur d'une ligne de "seq 240, et execute la ligne.

Dernière modification par tirom14 (Le 30/09/2011, à 11:46)

Hors ligne

#3 Le 30/09/2011, à 11:48

Coeur Noir

Re : Copier X fois une image, en renommer ses copies de 001 à X

Alors voyons si j'ai bien compris :

je me place dans le dossier où se trouve l'image originale

'seq 240' ça veut dire 'éxécute 240 fois'

"$i.tif" $ c'est pour numéroter et i pour conserver le nom du fichier d'origine ?

_____________________


edit : ooops nos posts se sont croisés, j'avais "pas tout à fait" compris, donc.

Merci pour les explications !!!!

Dernière modification par Coeur Noir (Le 30/09/2011, à 11:50)


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#4 Le 30/09/2011, à 11:55

pingouinux

Re : Copier X fois une image, en renommer ses copies de 001 à X

Bonjour,
Voici une autre façon de faire, pour que les numéros soient 001, 002 etc...

fic=aaa.tif                          # Nom du fichier à copier (extension quelconque)
N=10                                 # Nombre de copies souhaitées
suff=${fic##*.}                      # Extension (ici tif)
for i in $(seq $N)
do
   cp $fic `printf "%03d" $i`.$suff  # %03d pour 3 chiffres
done

Dernière modification par pingouinux (Le 30/09/2011, à 12:22)

Hors ligne

#5 Le 30/09/2011, à 11:58

Coeur Noir

Re : Copier X fois une image, en renommer ses copies de 001 à X

Premier test (qu'ai-je foiraillé ???) :

- sur mon bureau, une image appelée "babydoll.png" et un dossier nommé "seq"

- je tape la commande :

for i in 'seq 240'; do cp babydoll.png /home/coeur-noir/Bureau/seq/"$i.png"; done

- résultat : je me retrouve avec UNE image dans le dossier "seq" nommée "seq 240.png"

Pas vraiment ce que je cherche... je m'attendais à 240 images, nommées "001.png" jusqu'à "240.png"


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#6 Le 30/09/2011, à 12:03

tirom14

Re : Copier X fois une image, en renommer ses copies de 001 à X

C'est des euh... backquote autour de seq 240
des ´ plutot que '

et seq 240, c'est plus pour que i ton indice, prenne les valeur de 1 a 240.


[edit] En fait les backquote, c'est pour dire que ce qu'il y a entre doit être executé. La il a juste pris chaque ligne du texte (in "le text"), et il n'y avait qu'une ligne big_smile.

et "$i" veut dire, utilise la variable i. En shell on déclare les variable sans le dollar, et on les utilise avec.

Dernière modification par tirom14 (Le 30/09/2011, à 12:07)

Hors ligne

#7 Le 30/09/2011, à 12:18

Coeur Noir

Re : Copier X fois une image, en renommer ses copies de 001 à X

pingouinux a écrit :
fic=aaa.tif
N=10
suff=${fic##*.}
for i in $(seq $N)
do
   cp $fic `printf "%03d" $i`.$suff
done

Ha, je reconnais "%03d" que j'utilise dans ffmpeg lors d'extraction d'images... bref.
Euh, cela signifie que je dois remplacer
N par le nombre d'images souhaitées
fic par le nom du fichier original
suff euh là je vois pas trop...


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#8 Le 30/09/2011, à 12:25

pingouinux

Re : Copier X fois une image, en renommer ses copies de 001 à X

J'ai ajouté des commentaires dans le script.

Il y a juste à renseigner fic et N
suff est l'extension du fichier, il n'y a pas à la fournir

Hors ligne

#9 Le 30/09/2011, à 12:35

Coeur Noir

Re : Copier X fois une image, en renommer ses copies de 001 à X

tirom14 a écrit :

C'est des euh... backquote autour de seq 240
des ´ plutot que '

C'est Alt Gr + 7 ? (oui !)

Problème : il me faut un nommage 001...033...240, pas seulement 1,2,3... possible ?

Dernière modification par Coeur Noir (Le 30/09/2011, à 12:44)


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#10 Le 30/09/2011, à 12:41

tirom14

Re : Copier X fois une image, en renommer ses copies de 001 à X

yep !

Hors ligne

#11 Le 30/09/2011, à 12:41

credenhill

Re : Copier X fois une image, en renommer ses copies de 001 à X

hello

 seq -f "%03g" 1 240 | xargs -I{} cp babydoll.png seq/{}.png

Hors ligne

#12 Le 30/09/2011, à 12:42

AnsuzPeorth

Re : Copier X fois une image, en renommer ses copies de 001 à X

Bjr,
C'est bien pour ça que les backquotes sont à éviter (on ne le répetera jamais assez on dirait ..)
Utiliser $() plutot.
Et plutot que d'utiliser seq (qui fait une commande de plus inutile)

for i in {0..240}

et pour avoir des zéros avant

for i in {000..240}

Dernière modification par AnsuzPeorth (Le 30/09/2011, à 12:43)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#13 Le 30/09/2011, à 12:47

tirom14

Re : Copier X fois une image, en renommer ses copies de 001 à X

Pourquoi ne pas utiliser les backquotes ?
En fait j'ai jamais entendu parler de problèmes là dessus, du coup.... bin tout mes scripts en utilisent big_smile
Explique moi !

Dernière modification par tirom14 (Le 30/09/2011, à 12:47)

Hors ligne

#14 Le 30/09/2011, à 12:49

Coeur Noir

Re : Copier X fois une image, en renommer ses copies de 001 à X

Vous êtes géniaux, merci !

J'ai testé ça et c'est impeccable :

for i in {001..240}; do cp babydoll.png /home/coeur-noir/Bureau/seq/"$i.png"; done

DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#15 Le 30/09/2011, à 12:57

AnsuzPeorth

Re : Copier X fois une image, en renommer ses copies de 001 à X

tirom14 a écrit :

Pourquoi ne pas utiliser les backquotes ?
En fait j'ai jamais entendu parler de problèmes là dessus, du coup.... bin tout mes scripts en utilisent big_smile
Explique moi !

Déjà niveau lisibilité (on en a la preuve ici), et le backquotes ne permettent pas l'imbrication (ou en échappant, ce qui rends encore plus illisible le tout).

word_count=$( wc -w $(ls -l | awk '{print $9}') )
word_count=` wc -w \`ls -l | awk '{print $9}'\` `

exemple tiré de http://abs.traduc.org/abs-5.3-fr/index.html

Dernière modification par AnsuzPeorth (Le 30/09/2011, à 13:00)


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#16 Le 30/09/2011, à 14:03

tirom14

Re : Copier X fois une image, en renommer ses copies de 001 à X

ahhh.....
Ouai 'fin au fond, sur ce petit cas de ´seq 240´, ca reste lisible ?
Pis pas besoin d'imbrications sur le coup

Hors ligne

#17 Le 01/10/2011, à 22:46

Coeur Noir

Re : Copier X fois une image, en renommer ses copies de 001 à X

J'abuse si je demande conseil pour une autre idée...

Cette fois j'ai un tas de fichiers .flv que je dois convertir avec ffmpeg.

J'ai essayé ça :

palace@palace-bureau3:~/Bureau$ for f in *.flv; do echo $f; ffmpeg -i $f -s 720x424 -padtop 76 -padbottom 76 -f dvd -aspect 4:3 -r 25 -b 16000k -ar 48000 -ab 256k ~/Bureau/$f.mpg; done

cela semble fonctionner avec 2 réserves cependant :
- le nom du fichier converti au final est "mon-fichier.flv.mpg"
- s'il y a des espaces dans le nom du fichier .flv original, ça le zappe.

Donc deux questions :
- comment je lui demande de ne pas garder le suffixe original dans le nom final ?
- un moyen pour que la commande accepte les noms avec espace - ou c'est plus simple de renommer le fichiers originaux ?


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#18 Le 01/10/2011, à 23:50

Postmortem

Re : Copier X fois une image, en renommer ses copies de 001 à X

Salut,
Je ne connais pas plus que ça la commandes ffmpeg, mais si elle est bone, voici comment éviter les soucis d'espaces et retirer l'extension en trop :

for f in *.flv
do
echo "$f"
ffmpeg -i "$f" -s 720x424 -padtop 76 -padbottom 76 -f dvd -aspect 4:3 -r 25 -b 16000k -ar 48000 -ab 256k ~/Bureau/"${f/%flv/mpg}"
done

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#19 Le 02/10/2011, à 00:13

Coeur Noir

Re : Copier X fois une image, en renommer ses copies de 001 à X

Ah bah oui, des guillemets !!! Ca j'aurais pu y penser...

Par contre le ${f/%flv/mpg} je savais même pas où le chercher...

La partie ffmpeg n'est sans doute pas parfaite mais produit un résultat exploitable dans mon cas (projeter des spots pubs depuis un lecteur dvd connecté à un video-proj)

Grand merci, encore.


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#20 Le 02/10/2011, à 00:22

aduxas

Re : Copier X fois une image, en renommer ses copies de 001 à X

Afin d'éviter de tout regénérer, tu peux aussi renommer les fichiers:

rename 's/\.flv//' *.flv.mpg

Dernière modification par aduxas (Le 02/10/2011, à 00:23)

Hors ligne

#21 Le 02/10/2011, à 12:16

Coeur Noir

Re : Copier X fois une image, en renommer ses copies de 001 à X

Salut aduxas !

Tout régénérer ?

Euh... Ah oui ! Tu veux dire recommencer mes conversions depuis le début...

Donc ce que tu proposes renommes mes fichiers "finaux" en supprimant la partie .flv du nom de fichier_final.flv.mpg ce qui me laissera avec un fichier_final.mpg ?

Il s'agit d'apostrophe (4) ou de backquotes (alt gr+7) autour de s/\.flv//


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#22 Le 02/10/2011, à 18:18

aduxas

Re : Copier X fois une image, en renommer ses copies de 001 à X

Ben oui, changer le nom, ça prend une fraction de seconde.  L'expression de substitution est entre apostrophes.  Les backquotes ne sont utilisés que si tu veux remplacer la commande qu'ils entourent par son résultat.  Évidemment, il ne s'agit pas d'une commande linux ici mais d'une expression Perl (voir man rename, c'est même l'exemple exact de ce qu'il te faut.)

Dernière modification par aduxas (Le 02/10/2011, à 18:20)

Hors ligne

#23 Le 03/10/2011, à 13:33

Coeur Noir

Re : Copier X fois une image, en renommer ses copies de 001 à X

Et salut PostMortem !

Commande validée ! C'est super pratique...

...vais finir par trouver ça beau, la ligne de commandes !

Ca s'apprend où ?


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#24 Le 03/10/2011, à 14:18

Postmortem

Re : Copier X fois une image, en renommer ses copies de 001 à X

Pour des explications sur la syntaxe ${f/%flv/mpg}, la commande ci-dessous devrait t'envoyer direct au bon paragraphe du man.

man -P 'less -p "^ *Remplacement des paramètres"' bash
man -P 'less -p "^ *Parameter Expansion"' bash # Si ton man est en anglais

Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne