#1 Le 06/12/2023, à 16:15
- zool bzh
remplacer tous les carctères avant le .jpg
bonjour
je voudrais remplcer tous les carctères avant .jpg.
j'ai téléchargé rename, j'ai employé ça :
rename -v 's/\0-9/pic/' *.jpg
je voudrais donc \A-Z\a-z\0-9 dans la même ligne pour avoir pic001.jpg, pic002.jpg etc...
Quelle est la bonne syntaxe
merci
Hors ligne
#2 Le 06/12/2023, à 17:12
- Watael
Re : remplacer tous les carctères avant le .jpg
salut,
avec quelques exemples avant/après représentatifs des cas possibles, et l'explication de chaque transformation, ce serait plus clair.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 06/12/2023, à 17:17
- iznobe
Re : remplacer tous les carctères avant le .jpg
Bonjour ,
@ watael si j' ai bien compris le demandeur , veut simplement renommer tous les fichiers en :
pic001.jpg
pic002.jpg
etc ...
peu importe leur nom au départ .
Perso la 1ere idée qui me vient , c ' est de " simplement " faire une boucle avec un incrementation , si la demande correspond bien a ce que j' ai compris .
Dernière modification par iznobe (Le 06/12/2023, à 17:21)
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#5 Le 06/12/2023, à 17:32
- O_20_100_O
Re : remplacer tous les carctères avant le .jpg
j'ai téléchargé rename,
Peut-être qu'il a installé rename
https://man7.org/linux/man-pages/man1/rename.1.html
SYNOPSIS
rename [ -h|-m|-V ] [ -v ] [ -0 ] [ -n ] [ -f ] [ -d ] [ -u [enc]]
[ -e|-E perlexpr]*|perlexpr [ files ]DESCRIPTION
"rename" renames the filenames supplied according to the rule specified
as the first argument. The perlexpr argument is a Perl expression
which is expected to modify the $_ string in Perl for at least some of
the filenames specified. If a given filename is not modified by the
expression, it will not be renamed. If no filenames are given on the
command line, filenames will be read via standard input.
Dernière modification par O_20_100_O (Le 06/12/2023, à 17:38)
En ligne
#6 Le 06/12/2023, à 17:53
- iznobe
Re : remplacer tous les carctères avant le .jpg
iznobe a bien compris le demandeur.
Et comment tu la vois ta boucle ?
le specialiste du bash , ce n' est pas moi .
mais pour un debut de piste , c ' est genre :
for *.jpg in $Ton dossier
do rename options de renommage ....
Pour faire ce genre de chose , si j 'ai la possibilité je fais ca en graphique , sinon pour un serveur , je viens aussi demander sur le forum des conseils , car je ne maitrise pas suffisament le bash et ses subtilités ni les expressions regulieres / perl et autres trucs
Dernière modification par iznobe (Le 06/12/2023, à 17:55)
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#7 Le 06/12/2023, à 18:05
- zool bzh
Re : remplacer tous les carctères avant le .jpg
ok mais j'aimerais approfondir mes connaissances en regex
pic001.jpg
pic002.jpg
etc ...
peu importe leur nom au départ .
c'est bien ça.
le regex que je veux est du genre
rename -v 'y/\A-Z/a-z/0-9/pics/' *.jpg
la réponse
Unrecognized escape \A passed through at (eval 5) line 1.
Number found where operator expected at (eval 5) line 1, near "#line 1
y/\A-Z/a-z/0"
(Missing operator before 0?)
syntax error at (user-supplied code), near "y/\A-Z/a-z/0"
comment puis-je faire ?
Hors ligne
#9 Le 06/12/2023, à 18:57
- pingouinux
Re : remplacer tous les carctères avant le .jpg
Bonsoir,
À essayer (et enlever le -n après rename si c'est bon) :
for f in *.jpg;do printf -v num "pic%03d.jpg" $((++n)); rename -n "s/.*.jpg/$num/" $f; done
Dernière modification par pingouinux (Le 06/12/2023, à 18:58)
Hors ligne
#10 Le 06/12/2023, à 19:04
- pingouinux
Re : remplacer tous les carctères avant le .jpg
la reponse : pourquoi j'ai un
>
La syntaxe de la commande est erronée
$ help for
for: for NAME [in WORDS ... ] ; do COMMANDS; done
........................................
Hors ligne
#12 Le 06/12/2023, à 20:28
- Watael
Re : remplacer tous les carctères avant le .jpg
rename ne sert plus à grand chose, maintenant. Autant utiliser mv.
Dernière modification par Watael (Le 06/12/2023, à 20:28)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#14 Le 06/12/2023, à 21:26
- Watael
Re : remplacer tous les carctères avant le .jpg
mv "$f" "$num"
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#16 Le 07/12/2023, à 07:37
- pingouinux
Re : remplacer tous les carctères avant le .jpg
Pour remplacer rename par mv, tu peux faire :
n=0; for f in *.jpg; do printf -v num "pic%03d.jpg" $((++n)); mv -i "$f" "$num"; done
mv -i te prévient si un fichier de même nom existe déjà.
Hors ligne
#17 Le 07/12/2023, à 08:47
- pingouinux
Re : remplacer tous les carctères avant le .jpg
mv: impossible d'évaluer '*.jpg': Aucun fichier ou dossier de ce type
Tu n'as pas dû lancer la commande à partir du bon répertoire, ou bien ce dernier ne contient aucun fichier .jpg.
Hors ligne
#18 Le 07/12/2023, à 08:51
- diesel
Re : remplacer tous les carctères avant le .jpg
Ben, pourquoi les " dans la commande mv qui empêchent l'évaluation de $f et $num ?
n=0; for f in *.jpg; do printf -v num "pic%03d.jpg" $((++n)); mv -i $f $num; done
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 07/12/2023, à 08:53)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#19 Le 07/12/2023, à 08:59
- zool bzh
Re : remplacer tous les carctères avant le .jpg
en effet plus de jpg.
Ta commande fonctionne très bien
merci beaucoup pingouinux
ps j'ai suprimer un message mais vous étiez plus rapide je m'étais rendu compte de mes png
Dernière modification par zool bzh (Le 07/12/2023, à 09:03)
Hors ligne
#20 Le 07/12/2023, à 09:40
- pingouinux
Re : remplacer tous les carctères avant le .jpg
Ben, pourquoi les " dans la commande mv qui empêchent l'évaluation de $f et $num ?
La commande fonctionne. Les " sont utiles si les noms de fichiers contiennent des espaces.
Hors ligne
#21 Le 07/12/2023, à 11:04
- diesel
Re : remplacer tous les carctères avant le .jpg
Oui. Désolé pour le commentaire mal t'a propos.
Cela dit, ce n'est jamais vrai pour $num.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#22 Le 07/12/2023, à 12:42
- Watael
Re : remplacer tous les carctères avant le .jpg
Les " sont utiles indispensables si les noms de fichiers contiennent des espaces.
Dernière modification par Watael (Le 07/12/2023, à 12:49)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#23 Le 07/12/2023, à 12:49
- Watael
Re : remplacer tous les carctères avant le .jpg
mv: impossible d'évaluer '*.jpg': Aucun fichier ou dossier de ce type
pour éviter cela, bash possède une option nullglob, qui fera que le développement du motif (ici, *.jpg) sera nul (une boucle ne se déclenchera pas) si le motif ne correspond à rien.
ce n'est pas très clair :
$ echo *.rien
*.rien
$ shopt -s nullglob
$ echo *.rien
$
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#25 Le 07/12/2023, à 13:18
- pingouinux
Re : remplacer tous les carctères avant le .jpg
@zool_bzh #24
Pas facile de te dépanner si tu ne montres pas les commandes complètes…
Je dirais que tu n'as pas réinitialisé n à 0.
Hors ligne