Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails)

#1 Le 26/11/2012, à 01:50

alfirdaous

xargs et la numerotation

Bonjour,

J'ai des noms de fichiers du type:

00001-ABC.flv
00002-DEF.flv
00003-GHI.flv
00004-JKL.flv
00005-MNO.flv

La numerotation s'incremente, apres un tiret et le nom du fichier, comment utiliser xargs pour ecrire du texte sur les videos d'une seule ligne de commande?

printf "%s\n" {00001..00005} | xargs -i ffmpeg -i INPUT.flv -vf "drawtext=fontfile='/usr/share/fonts/truetype/msttcorefonts/Times_New_Roman_Bold.ttf':text='TEXTE':x=20:y=30:fontsize=15:fontcolor=white" -vcodec libx264 -preset medium -crf 24 -acodec copy OUTPUT.mp4

Ce que je cherche est le ferme du fichier INPUT.flv, normalement si le nom ca change pas juste le numero, on fait {}-NOMFICHIER.flv

Merci

Hors ligne

#2 Le 26/11/2012, à 08:39

nesthib

Re : xargs et la numerotation

euh…

for fichier in 0000*.flv
do
  commande sur ${fichier}"
done

?


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#3 Le 27/11/2012, à 02:40

alfirdaous

Re : xargs et la numerotation

j'ai voulu les renommer autrement:

00001-ABC.flv devient 00001-titre.flv
00002-DEF.flv devient 00002-titre.flv

ainsi de suite, on garde la numerotation et on change les alphabets par 'titre'

for fichier in 0000*.flv do mv ${fichier}" ${fichier}_titre done

rien comme resultat

Hors ligne

#4 Le 27/11/2012, à 03:06

nesthib

Re : xargs et la numerotation

for fichier in 0000*.flv
do
  mv "${fichier}" "${fichier/-*./-titre.}"
done

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#5 Le 27/11/2012, à 04:19

alfirdaous

Re : xargs et la numerotation

c'est possible de la mettre en une seule ligne de commande?

Hors ligne

#6 Le 27/11/2012, à 04:37

nesthib

Re : xargs et la numerotation

oui, utilise des « ; »


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#7 Le 28/11/2012, à 05:27

alfirdaous

Re : xargs et la numerotation

nesthib a écrit :

oui, utilise des « ; »

Je pense que je me trompe des positions des ";"

$ "for fichier in 0000*.flv do mv "${fichier}" "${fichier/-*./-titre.}" done;"

Hors ligne

#8 Le 28/11/2012, à 07:26

pingouinux

Re : xargs et la numerotation

Bonjour,
C'est

for fichier in 0000*.flv; do mv "${fichier}" "${fichier/-*./-titre.}"; done

En ligne

#9 Le 28/11/2012, à 13:36

alfirdaous

Re : xargs et la numerotation

est ce que vous pouvez m'expliquer cette partie?

"${fichier/-*./-titre.}"

Hors ligne

#10 Le 28/11/2012, à 13:57

pingouinux

Re : xargs et la numerotation

@alfirdaous #9 :
Voici un exemple :

$ fichier=début_du_nom-n_importe_quoi.extension

$ echo "${fichier/-*./-titre.}"
début_du_nom-titre.extension

Voir man bash, rubrique Expansion des paramètres.

Dernière modification par pingouinux (Le 28/11/2012, à 13:57)

En ligne

#11 Le 29/11/2012, à 02:24

alfirdaous

Re : xargs et la numerotation

n'importe quoi c'est *, que signifie ca:

/-*./-

et surtout les  premier /-

Hors ligne

#12 Le 29/11/2012, à 05:47

nesthib

Re : xargs et la numerotation

« - » et « . » signifient respectivement, et littéralement, les tiret et point avant et après « ABC » dans « 00001-ABC.flv »

Imagine que je te dise, « prend la plus grande chaîne de caractère qui comprenne n'importe quoi dans "00001-ABC.flv" ». Tu dois choisir la totalité.

Si maintenant je te dis « prend la plus grande chaîne de caractère qui commence par un tiret, qui comprend ensuite n'importe quoi et qui finit par un point dans "00001-ABC.flv" ». Tu ne choisis que « -ABC. ». C'est précisément ce qu'on appelle une expression rationnelle (en l'occurrence ici c'est une expression très simplifiée, on appelle ça « globbing » ou « joker »).

Pour le « / », je te recommande de lire le man de bash à la section parameter expansion.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#13 Le 29/11/2012, à 06:17

alfirdaous

Re : xargs et la numerotation

c'est pareil aux REGEX?

Hors ligne

#14 Le 29/11/2012, à 06:47

nesthib

Re : xargs et la numerotation

Oui. Le terme français est « expression rationnelle », en anglais c'est « regular expression », d'où l'abus de langage.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#15 Le 29/11/2012, à 06:57

pingouinux

Re : xargs et la numerotation

c'est pareil aux REGEX?

Pas tout-à-fait, c'est comme l'expansion des noms de fichiers dans les commandes.

Par exemple, le caractère * remplace :

  • n'importe quelle suite de caractères dans une substitution de pattern

  • 0 ou plus occurrences du caractère qui le précède dans une regex

Extrait de man bash

${parameter/pattern/string}
              Pattern substitution.  The pattern is expanded to produce a pat‐
              tern just as in pathname expansion.

En ligne

#16 Le 29/11/2012, à 07:29

nesthib

Re : xargs et la numerotation

Oui j'ai un peu simplifié dans ma précédente réponse, pour être exact la différence entre le « globbing » ou « joker » et les expressions rationnelles est que le quantificateur « * » est implicitement confondu avec le motif « . » pour le globbing, là où une expression rationnelle s'écrirait « .* ».

Le globbing a une syntaxe étendue, similaire à celle des expression rationnelles, ce qui donnerait :

var=00001-ABC.flv
shopt -s extglob
echo ${var/+([A-Z])/titre}

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#17 Le 29/11/2012, à 08:33

Watael

Re : xargs et la numerotation

Le globbing a une syntaxe étendue, similaire à celle des expression rationnelles

mouais, pas vraiment.
La correspondance étendue est propre à bash (imitée de ksh probablement), et n'a qu'un rapport très lointain avec les regex.
Il n'y a guère que l'utilisation d'expression de plage, des classe de caractères et classe d'équivalence, qui leurs soient communes.
Sinon l'expression est soumise aux mêmes règles que les Motifs génériques
par exemple ".*" signifie un point suivi d'un, plusieurs ou aucun caratère, et pas (comme en regex) un, plusieurs, ou aucun caractère.

Dernière modification par Watael (Le 29/11/2012, à 08:37)


eval, c'est mal.

Hors ligne

#18 Le 01/12/2012, à 08:53

alfirdaous

Re : xargs et la numerotation

donc je peux mettre comme ca aussi:

00001-ABC.flv
titre1-titre2-001.flv
titre1-titre2-002.flv
...
titre1-titre2-100.flv
for fichier in 000*.flv; do mv "${fichier}" "titre1-titre2-*.${fichier}"; done

Hors ligne

#19 Le 01/12/2012, à 09:31

pingouinux

Re : xargs et la numerotation

Bonjour,
Tu peux tester ta commande en faisant précéder le mv d'un echo, pour être sûr de ne pas faire de bêtise.  Tu constates ainsi qu'elle ne fait pas ce que tu veux.

$ ls
00001-ABC.flv   00002-DEF.flv

$ for fichier in 000*.flv; do echo mv "${fichier}" "titre1-titre2-*.${fichier}"; done
mv 00001-ABC.flv titre1-titre2-*.00001-ABC.flv
mv 00002-DEF.flv titre1-titre2-*.00002-DEF.flv

Ajouté :
Ceci devrait convenir :

$ for fichier in 000*.flv; do echo mv "${fichier}" "$(sed -r 's/.*([0-9]{3})-.*\./titre1-titre2-\1./' <<<"$fichier")"; done
mv 00001-ABC.flv titre1-titre2-001.flv
mv 00002-DEF.flv titre1-titre2-002.flv

Dernière modification par pingouinux (Le 01/12/2012, à 11:09)

En ligne

#20 Le 05/12/2012, à 05:21

alfirdaous

Re : xargs et la numerotation

c'est complique ca, je vais relire la doc, merci a vous

Hors ligne

Haut de page ↑