Pages : 1
#1 Le 26/11/2012, à 00: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, à 07:39
- nesthib
Re : xargs et la numerotation
euh…
for fichier in 0000*.flv
do
commande sur ${fichier}"
done
?
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#3 Le 27/11/2012, à 01: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, à 02:06
- nesthib
Re : xargs et la numerotation
for fichier in 0000*.flv
do
mv "${fichier}" "${fichier/-*./-titre.}"
done
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#5 Le 27/11/2012, à 03: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, à 03:37
- nesthib
Re : xargs et la numerotation
oui, utilise des « ; »
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#7 Le 28/11/2012, à 04:27
- alfirdaous
Re : xargs et la numerotation
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, à 06:26
- pingouinux
Re : xargs et la numerotation
Bonjour,
C'est
for fichier in 0000*.flv; do mv "${fichier}" "${fichier/-*./-titre.}"; done
Hors ligne
#9 Le 28/11/2012, à 12: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, à 12: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, à 12:57)
Hors ligne
#11 Le 29/11/2012, à 01: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, à 04: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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#13 Le 29/11/2012, à 05:17
- alfirdaous
Re : xargs et la numerotation
c'est pareil aux REGEX?
Hors ligne
#14 Le 29/11/2012, à 05: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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#15 Le 29/11/2012, à 05: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.
Hors ligne
#16 Le 29/11/2012, à 06: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 : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#17 Le 29/11/2012, à 07: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, à 07:37)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#18 Le 01/12/2012, à 07: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, à 08: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, à 10:09)
Hors ligne
#20 Le 05/12/2012, à 04:21
- alfirdaous
Re : xargs et la numerotation
c'est complique ca, je vais relire la doc, merci a vous
Hors ligne