Rename ?
Résolu/Fermé
eZula
Messages postés
3391
Date d'inscription
samedi 26 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2021
-
27 sept. 2008 à 16:31
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 28 sept. 2008 à 10:35
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 28 sept. 2008 à 10:35
A voir également:
- Rename ?
- Lupas rename - Télécharger - Gestion de fichiers
- Bulk rename utility - Télécharger - Gestion de fichiers
- A-pdf rename - Télécharger - PDF
- Rename - Télécharger - Gestion de fichiers
- A better finder rename - Télécharger - Divers Utilitaires
15 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
27 sept. 2008 à 17:43
27 sept. 2008 à 17:43
Re,
dans ton cas tu dois faire
dans ton cas tu dois faire
rename '2.txt' '3.txt' REP2.txt && ls
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
27 sept. 2008 à 17:47
27 sept. 2008 à 17:47
Pour ton test initial il faut écrire
rename from to file...
ce qui veut dire que
from c'est '1.txt'
to c'est '.txt'
donc tu modifies la partie from par la partie to de ton fichier REP1.txt
ce qui donne REP.txt
rename '1.txt' '.txt' REP1.txtDans ton man rename
rename from to file...
ce qui veut dire que
from c'est '1.txt'
to c'est '.txt'
donc tu modifies la partie from par la partie to de ton fichier REP1.txt
ce qui donne REP.txt
jeanbi
Messages postés
15118
Date d'inscription
samedi 9 décembre 2006
Statut
Contributeur
Dernière intervention
6 février 2023
2 181
27 sept. 2008 à 16:37
27 sept. 2008 à 16:37
bonjour,
man rename
rename - Renommer plusieurs fichiers
SYNOPSIS
rename [ -v ] perlexpr [ fichiers ]
DESCRIPTION
"rename" renomme les fichiers en accord avec la règle spécifiée comme
premier argument. L’argument perlexpr est une expression Perl qui va
modifier la chaine Perl "$_" pour au moins un des fichiers spécifiés.
Si un nom de fichier donné n’est pas modifié par l’expression, il ne
sera pas renommé. Si aucun nom de fichier n’est fourni, la liste des
fichiers sera lue sur l’entrée standard.
Par exemple, pour renommer tous les fichiers correspondant à "*.bak" de
manière à retirer leur extension, vous pouvez faire
rename ’s/\e.bak$//’ *.bak
Pour convertir les majuscules en minuscules, vous feriez
rename ’y/A-Z/a-z/’ *
a+
man rename
rename - Renommer plusieurs fichiers
SYNOPSIS
rename [ -v ] perlexpr [ fichiers ]
DESCRIPTION
"rename" renomme les fichiers en accord avec la règle spécifiée comme
premier argument. L’argument perlexpr est une expression Perl qui va
modifier la chaine Perl "$_" pour au moins un des fichiers spécifiés.
Si un nom de fichier donné n’est pas modifié par l’expression, il ne
sera pas renommé. Si aucun nom de fichier n’est fourni, la liste des
fichiers sera lue sur l’entrée standard.
Par exemple, pour renommer tous les fichiers correspondant à "*.bak" de
manière à retirer leur extension, vous pouvez faire
rename ’s/\e.bak$//’ *.bak
Pour convertir les majuscules en minuscules, vous feriez
rename ’y/A-Z/a-z/’ *
a+
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
27 sept. 2008 à 16:42
27 sept. 2008 à 16:42
Salut,
pour commencer voir man rename
Exemples d'utilisation
http://www.commentcamarche.net/forum/affich 2487290 renomer liste fichier linux
http://www.commentcamarche.net/forum/affich 3624319 probleme pour renommer des fichiers#6
http://www.commentcamarche.net/forum/affich 3968147 shell probleme avec boucle find et espaces#13
http://www.commentcamarche.net/forum/affich 3382569 remplacer espacements dans noms de fichier#1
http://www.commentcamarche.net/forum/affich 3169814 noms de fichiers caracteres inhabituels#13
http://www.commentcamarche.net/forum/affich 2509449 remplacement d une chaine de caracteres#1
pour commencer voir man rename
Exemples d'utilisation
http://www.commentcamarche.net/forum/affich 2487290 renomer liste fichier linux
http://www.commentcamarche.net/forum/affich 3624319 probleme pour renommer des fichiers#6
http://www.commentcamarche.net/forum/affich 3968147 shell probleme avec boucle find et espaces#13
http://www.commentcamarche.net/forum/affich 3382569 remplacer espacements dans noms de fichier#1
http://www.commentcamarche.net/forum/affich 3169814 noms de fichiers caracteres inhabituels#13
http://www.commentcamarche.net/forum/affich 2509449 remplacement d une chaine de caracteres#1
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
eZula
Messages postés
3391
Date d'inscription
samedi 26 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2021
392
27 sept. 2008 à 16:42
27 sept. 2008 à 16:42
Merci, mais voici ma manpage de rename :
RENAME(1) Linux Programmer's Manual RENAME(1)
NAME
rename - Rename files
SYNOPSIS
rename from to file...
rename -V
DESCRIPTION
rename will rename the specified files by replacing the first occurrence of from in their name by to.
-V, --version
Display version information and exit.
For example, given the files
foo1, ..., foo9, foo10, ..., foo278, the commands
rename foo foo0 foo?
rename foo foo0 foo??
will turn them into foo001, ..., foo009, foo010, ..., foo278.
And
rename .htm .html *.htm
will fix the extension of your html files.
SEE ALSO
mmv(1), mv(1)
AVAILABILITY
The rename command is part of the util-linux-ng package and is avail-
able from ftp://ftp.kernel.org/pub/linux/utils/util-linux-ng/.
1 January 2000 RENAME(1)
j'en ai déduit qu'un simple rename fichier fichier2 pourrait suffire, ou a la rigueur rename from fichier to fichier2, mais non.
Heu c'est vraiment très con ce que je cherche à faire, renommer un simple fichier. La perlexpr est-elle une fatalité ? comment expliquer le décalage entre la description de la manpage ci-dessus et la complexité de l'opération que tu décris ?
RENAME(1) Linux Programmer's Manual RENAME(1)
NAME
rename - Rename files
SYNOPSIS
rename from to file...
rename -V
DESCRIPTION
rename will rename the specified files by replacing the first occurrence of from in their name by to.
-V, --version
Display version information and exit.
For example, given the files
foo1, ..., foo9, foo10, ..., foo278, the commands
rename foo foo0 foo?
rename foo foo0 foo??
will turn them into foo001, ..., foo009, foo010, ..., foo278.
And
rename .htm .html *.htm
will fix the extension of your html files.
SEE ALSO
mmv(1), mv(1)
AVAILABILITY
The rename command is part of the util-linux-ng package and is avail-
able from ftp://ftp.kernel.org/pub/linux/utils/util-linux-ng/.
1 January 2000 RENAME(1)
j'en ai déduit qu'un simple rename fichier fichier2 pourrait suffire, ou a la rigueur rename from fichier to fichier2, mais non.
Heu c'est vraiment très con ce que je cherche à faire, renommer un simple fichier. La perlexpr est-elle une fatalité ? comment expliquer le décalage entre la description de la manpage ci-dessus et la complexité de l'opération que tu décris ?
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
27 sept. 2008 à 16:46
27 sept. 2008 à 16:46
Re,
pour remplacer REP1.txt avec REP.txt il suffit de supprimer 1 (en fait de le remplacer avec rien plutôt)
pour remplacer REP1.txt avec REP.txt il suffit de supprimer 1 (en fait de le remplacer avec rien plutôt)
lami20j@debian:~$ touch REP1.txt lami20j@debian:~$ ls -l REP1.txt -rw-r--r-- 1 lami20j lami20j 0 2008-09-27 16:44 REP1.txt lami20j@debian:~$ rename 's/1//' REP1.txt lami20j@debian:~$ ls -l REP1.txt ls: REP1.txt: Aucun fichier ou répertoire de ce type lami20j@debian:~$ ls -l REP.txt -rw-r--r-- 1 lami20j lami20j 0 2008-09-27 16:44 REP.txt lami20j@debian:~$
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
27 sept. 2008 à 16:47
27 sept. 2008 à 16:47
Re,
Heu c'est vraiment très con ce que je cherche à faire, renommer un simple fichier
en ce cas pourquoi pas
Heu c'est vraiment très con ce que je cherche à faire, renommer un simple fichier
en ce cas pourquoi pas
mv REP1.txt REP.txt
eZula
Messages postés
3391
Date d'inscription
samedi 26 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2021
392
27 sept. 2008 à 16:55
27 sept. 2008 à 16:55
La deuxième solution fonctionne.
La première non, exemple : remplacer REP2.txt par REP3.txt
tu utilises quelle version de rename ?
La première non, exemple : remplacer REP2.txt par REP3.txt
~/Desktop/compt> ls REP1.txt REP2.txt REP.txt URL1.txt URL2.txt URL.txt rename 's/2/3/' REP2.txt && ls REP1.txt REP2.txt REP.txt URL1.txt URL2.txt URL.txt
tu utilises quelle version de rename ?
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
27 sept. 2008 à 16:59
27 sept. 2008 à 16:59
Voici chez moi
Mon rename est la fonction de perl 5.8.8
lami20j@debian:~/eZula$ touch REP1.txt REP2.txt REP.txt URL1.txt URL2.txt URL.txt lami20j@debian:~/eZula$ ls -l total 0 -rw-r--r-- 1 lami20j lami20j 0 2008-09-27 16:56 REP1.txt -rw-r--r-- 1 lami20j lami20j 0 2008-09-27 16:56 REP2.txt -rw-r--r-- 1 lami20j lami20j 0 2008-09-27 16:56 REP.txt -rw-r--r-- 1 lami20j lami20j 0 2008-09-27 16:56 URL1.txt -rw-r--r-- 1 lami20j lami20j 0 2008-09-27 16:56 URL2.txt -rw-r--r-- 1 lami20j lami20j 0 2008-09-27 16:56 URL.txt lami20j@debian:~/eZula$ rename 's/2/3/' REP2.txt && ls REP1.txt REP3.txt REP.txt URL1.txt URL2.txt URL.txt
Mon rename est la fonction de perl 5.8.8
RENAME(1) Perl Programmers Reference Guide RENAME(1) NAME rename - renames multiple files SYNOPSIS rename [ -v ] [ -n ] [ -f ] 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, file- names will be read via standard input. For example, to rename all files matching "*.bak" to strip the extension, you might say rename 's/\.bak$//' *.bak To translate uppercase names to lower, you'd use rename 'y/A-Z/a-z/' * OPTIONS -v, --verbose Verbose: print names of files successfully renamed. -n, --no-act No Action: show what files would have been renamed. -f, --force Force: overwrite existing files. ENVIRONMENT No environment variables are used. AUTHOR Larry Wall SEE ALSO mv(1), perl(1) DIAGNOSTICS If you give an invalid Perl expression you'll get a syntax error. BUGS The original "rename" did not check for the existence of target filenames, so had to be used with care. I hope I've fixed that (Robin Barker). perl v5.8.8 2008-04-25 RENAME(1) Manual page rename(1) line 1/51 (END)
eZula
Messages postés
3391
Date d'inscription
samedi 26 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2021
392
27 sept. 2008 à 17:09
27 sept. 2008 à 17:09
conclusion : ça marche chez toi et surtout nous n'utilisons pas la même version (la tienne est plus récente et plus avancée)
Je reste un peu sur ma faim, bien que ta deuxième solution soit la plus probablement retenue, car je ne comprends pas pourquoi mon test initial ne fonctionne pas au regard du manpage de cette version util-linux-ng 2.13.1
Je reste un peu sur ma faim, bien que ta deuxième solution soit la plus probablement retenue, car je ne comprends pas pourquoi mon test initial ne fonctionne pas au regard du manpage de cette version util-linux-ng 2.13.1
eZula
Messages postés
3391
Date d'inscription
samedi 26 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2021
392
27 sept. 2008 à 17:56
27 sept. 2008 à 17:56
exact, bien vu ;)
Merci lami20j
Merci lami20j
eZula
Messages postés
3391
Date d'inscription
samedi 26 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2021
392
27 sept. 2008 à 19:27
27 sept. 2008 à 19:27
Mince, là je suis bien embêté avec un pb que j'ai sous-estimé.
Dans un dossier compt, il y a ces fichiers
Le fichier Compteur.txt contient simplement le caractère 2
Le but de la manip est :
- initialiser un compteur compt à la valeur du contenu du fichier Compteur.txt (càd 2)
- par pas de 1 décrémenter ce compteur et renommer les fichiers REP$compt .txt en rep(compt -1).txt
jusqu'à ce que $compt=0
Donc en gros :
REP1.txt -> devient REP0.txt
REP2.txt -> devient REP1.txt
et stop
donc
ça me parait bien cradasse comme code, sans compter que ça ne marche pas. J'ai essayé d'inverser la séquence en utilisant | tac mais c'est pas mieux. Pareil avec les guillemets ou simple ' ça ne change rien. Je me suis perdu avec une boucle while (la condition était : "tant que le compteur est strictement supérieur à zéro, décrémenter ce compteur et renommer" - pour l'arrêt de la boucle).
Comment procèderiez-vous proprement pour arriver au résultat attendu ?
Dans un dossier compt, il y a ces fichiers
~/Desktop/compt> ls Compteur.txt REP1.txt REP2.txt
Le fichier Compteur.txt contient simplement le caractère 2
Le but de la manip est :
- initialiser un compteur compt à la valeur du contenu du fichier Compteur.txt (càd 2)
- par pas de 1 décrémenter ce compteur et renommer les fichiers REP$compt .txt en rep(compt -1).txt
jusqu'à ce que $compt=0
Donc en gros :
REP1.txt -> devient REP0.txt
REP2.txt -> devient REP1.txt
et stop
donc
compt=$(cat Compteur.txt) for i in `seq $compt` ; do j=$(( $compt - 1 ));rename "$compt" "$j" REP$compt.txt ; done
ça me parait bien cradasse comme code, sans compter que ça ne marche pas. J'ai essayé d'inverser la séquence en utilisant | tac mais c'est pas mieux. Pareil avec les guillemets ou simple ' ça ne change rien. Je me suis perdu avec une boucle while (la condition était : "tant que le compteur est strictement supérieur à zéro, décrémenter ce compteur et renommer" - pour l'arrêt de la boucle).
Comment procèderiez-vous proprement pour arriver au résultat attendu ?
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
27 sept. 2008 à 19:58
27 sept. 2008 à 19:58
Re,
for i in $(seq $(cat Compteur.txt));do rename "$i.txt" "$(($i-1)).txt" REP*;done
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
27 sept. 2008 à 20:22
27 sept. 2008 à 20:22
Salut,
;-))
[eZula]$ ls foo.sh* REP1.txt REP2.txt REP3.txt REP4.txt [eZula]$ cat foo.sh #! /bin/bash for i in REP* do number=$(grep -o '[ [:digit:]]' <<<$i) mv ${i} ${i/$number/$(($number -1))} done [eZula]$ ./foo.sh [eZula]$ ls foo.sh* REP0.txt REP1.txt REP2.txt REP3.txt [eZula]$L'espace entre les crochets ouvrant de :digit: est à enlevé, c'est à cause de la mise en forme de la balise code se CCM.
;-))
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
27 sept. 2008 à 20:34
27 sept. 2008 à 20:34
Salut,
je n'ai pas utilisé mv puisqu'en fait il voulait avec rename du Suse qui est un peu différent par rapport à ce que j'ai par exemple sur Debian ;-))
sinon avec mv ;-))
je n'ai pas utilisé mv puisqu'en fait il voulait avec rename du Suse qui est un peu différent par rapport à ce que j'ai par exemple sur Debian ;-))
sinon avec mv ;-))
$ ls -1 Compteur.txt REP1.txt REP2.txt $ for i in $(seq $(cat Compteur.txt));do mv "REP$i.txt" "REP$(($i-1)).txt";done $ ls -1 Compteur.txt REP0.txt REP1.txt
eZula
Messages postés
3391
Date d'inscription
samedi 26 avril 2008
Statut
Contributeur
Dernière intervention
8 mai 2021
392
28 sept. 2008 à 10:27
28 sept. 2008 à 10:27
Salut,
Après réflexion la solution de jipicy a été retenue car cette histoire de compteur n'est au final pas très pratique pour la suite, voire peut être même inutile.
Donc merci à vous deux
Après réflexion la solution de jipicy a été retenue car cette histoire de compteur n'est au final pas très pratique pour la suite, voire peut être même inutile.
Donc merci à vous deux
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
28 sept. 2008 à 10:35
28 sept. 2008 à 10:35
Salut,
de toute façon les 3 solutions font exactement la même chose ;-)
de toute façon les 3 solutions font exactement la même chose ;-)