#1 Le 26/11/2012, à 01:50
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.flvLa 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.mp4Ce 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
Re : xargs et la numerotation
euh…
for fichier in 0000*.flv
do
commande sur ${fichier}"
done?
GUL les mardis à Bordeaux : Giroll
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ᴉsdnGMT-4
Hors ligne
#3 Le 27/11/2012, à 02:40
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 donerien comme resultat
Hors ligne
#4 Le 27/11/2012, à 03:06
Re : xargs et la numerotation
for fichier in 0000*.flv
do
mv "${fichier}" "${fichier/-*./-titre.}"
doneGUL les mardis à Bordeaux : Giroll
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ᴉsdnGMT-4
Hors ligne
#5 Le 27/11/2012, à 04:19
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
Re : xargs et la numerotation
oui, utilise des « ; »
GUL les mardis à Bordeaux : Giroll
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ᴉsdnGMT-4
Hors ligne
#7 Le 28/11/2012, à 05:27
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, à 07:26
Re : xargs et la numerotation
Bonjour,
C'est
for fichier in 0000*.flv; do mv "${fichier}" "${fichier/-*./-titre.}"; doneHors ligne
#9 Le 28/11/2012, à 13:36
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
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.extensionVoir man bash, rubrique Expansion des paramètres.
Dernière modification par pingouinux (Le 28/11/2012, à 13:57)
Hors ligne
#11 Le 29/11/2012, à 02:24
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
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 les mardis à Bordeaux : Giroll
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ᴉsdnGMT-4
Hors ligne
#13 Le 29/11/2012, à 06:17
Hors ligne
#14 Le 29/11/2012, à 06:47
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 les mardis à Bordeaux : Giroll
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ᴉsdnGMT-4
Hors ligne
#15 Le 29/11/2012, à 06:57
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, à 07:29
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 les mardis à Bordeaux : Giroll
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ᴉsdnGMT-4
Hors ligne
#17 Le 29/11/2012, à 08:33
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
Re : xargs et la numerotation
donc je peux mettre comme ca aussi:
00001-ABC.flvtitre1-titre2-001.flv
titre1-titre2-002.flv
...
titre1-titre2-100.flvfor fichier in 000*.flv; do mv "${fichier}" "titre1-titre2-*.${fichier}"; doneHors ligne
#19 Le 01/12/2012, à 09:31
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.flvAjouté :
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.flvDernière modification par pingouinux (Le 01/12/2012, à 11:09)
Hors ligne
#20 Le 05/12/2012, à 05:21
Re : xargs et la numerotation
c'est complique ca, je vais relire la doc, merci a vous
Hors ligne
Pages : 1
- Accueil
- » Forum
- » Terminal, scripts et ligne de commande
- » xargs et la numerotation
