|
|
|
|
Bonjour,
je n'avais pas eu l'occasion de toucher la commande rename sous shell bash, pour une opération tout ce qu'il y a de plus trivial :
rename REP1.txt REP.txt
Configuration: Linux Suse Firefox 3.0.2
Bonjour,
|
Salut,
|
Merci, mais voici ma manpage de rename :
|
Re,
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:~$ 106485010510997108 |
Voici chez moi
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)
106485010510997108 |
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)
|
Mince, là je suis bien embêté avec un pb que j'ai sous-estimé.
~/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 ? |
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.
;-)) $ man woman Il n'y a pas de page de manuel pour woman.
|