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 06/12/2023, à 17: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


Free Party is not a crime

Hors ligne

#2 Le 06/12/2023, à 18: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, à 18: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, à 18:21)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#4 Le 06/12/2023, à 18:25

zool bzh

Re : remplacer tous les carctères avant le .jpg

iznobe a bien compris le demandeur.
Et comment tu la vois ta boucle ?


Free Party is not a crime

Hors ligne

#5 Le 06/12/2023, à 18:32

O_20_100_O

Re : remplacer tous les carctères avant le .jpg

zool bzh a écrit :

j'ai téléchargé rename,

Peut-être qu'il a installé rename
https://man7.org/linux/man-pages/man1/rename.1.html

Le man a écrit :

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, à 18:38)

Hors ligne

#6 Le 06/12/2023, à 18:53

iznobe

Re : remplacer tous les carctères avant le .jpg

zool bzh a écrit :

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 roll

Dernière modification par iznobe (Le 06/12/2023, à 18:55)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#7 Le 06/12/2023, à 19:05

zool bzh

Re : remplacer tous les carctères avant le .jpg

ok mais j'aimerais approfondir mes connaissances en regex

iznobe a écrit :

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 ?


Free Party is not a crime

Hors ligne

#8 Le 06/12/2023, à 19:23

zool bzh

Re : remplacer tous les carctères avant le .jpg

pour la boucle :

 for *.jpg in $dossier do rename -v 'y/A-Z/a-z/' *

la reponse : pourquoi j'ai un

>

excusez mon niveau hmm


Free Party is not a crime

Hors ligne

#9 Le 06/12/2023, à 19: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, à 19:58)

Hors ligne

#10 Le 06/12/2023, à 20:04

pingouinux

Re : remplacer tous les carctères avant le .jpg

zool_bzh #8 a écrit :

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

#11 Le 06/12/2023, à 21:18

zool bzh

Re : remplacer tous les carctères avant le .jpg

Merci pingouinux tu me sauves !

Dernière modification par zool bzh (Le 06/12/2023, à 21:19)


Free Party is not a crime

Hors ligne

#12 Le 06/12/2023, à 21: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, à 21:28)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#13 Le 06/12/2023, à 22:09

zool bzh

Re : remplacer tous les carctères avant le .jpg

Ok Watael.
Et comment tu ferais avec mv ?
juste pour savoir


Free Party is not a crime

Hors ligne

#14 Le 06/12/2023, à 22:26

Watael

Re : remplacer tous les carctères avant le .jpg

mv "$f" "$num"


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#15 Le 07/12/2023, à 08:00

zool bzh

Re : remplacer tous les carctères avant le .jpg

mon_réperoire$ mv "$f" "$num"
mv: impossible d'évaluer '': Aucun fichier ou dossier de ce type
Excuse moi Watael mais je débute tongue


Free Party is not a crime

Hors ligne

#16 Le 07/12/2023, à 08: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, à 09:47

pingouinux

Re : remplacer tous les carctères avant le .jpg

zool_bzh #17 a écrit :
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, à 09: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, à 09: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, à 09: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, à 10:03)


Free Party is not a crime

Hors ligne

#20 Le 07/12/2023, à 10:40

pingouinux

Re : remplacer tous les carctères avant le .jpg

diesel #18 a écrit :

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, à 12: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. tongue

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, à 13:42

Watael

Re : remplacer tous les carctères avant le .jpg

Les " sont utiles indispensables si les noms de fichiers contiennent des espaces.

big_smile

Dernière modification par Watael (Le 07/12/2023, à 13:49)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#23 Le 07/12/2023, à 13:49

Watael

Re : remplacer tous les carctères avant le .jpg

zool_bzh #17 a écrit :
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

#24 Le 07/12/2023, à 14:12

zool bzh

Re : remplacer tous les carctères avant le .jpg

ok merci Watael
Et si je veux pic0001, actuellement j'ai pic001 avec

pic%03d.jpg

j'ai essayé

pic%04d.jpg

mais je commence à 1001
Alors comment faire

Dernière modification par zool bzh (Le 07/12/2023, à 14:16)


Free Party is not a crime

Hors ligne

#25 Le 07/12/2023, à 14: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