Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1818 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  renommer rapidement des fichiers

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

renommer rapidement des fichiers

n°1197395
damcmoi
Posté le 12-09-2005 à 10:05:53  profilanswer
 

Salut les gars, pitite question j'ai ça :
 

ls *.new*  
cuxetc.new0   cuxetc.new2  pdata.new0   pdata.new2  sxpetc.new0   sxpetc.new2  
cuxetc.new1   cuxetc.new3  pdata.new1   pdata.new3  sxpetc.new1   sxpetc.new3  
cuxetc.new10  cuxetc.new4  pdata.new10  pdata.new4  sxpetc.new10  sxpetc.new4  
cuxetc.new11  cuxetc.new5  pdata.new11  pdata.new5  sxpetc.new11  sxpetc.new5  
cuxetc.new12  cuxetc.new6  pdata.new12  pdata.new6  sxpetc.new12  sxpetc.new6  
cuxetc.new13  cuxetc.new7  pdata.new13  pdata.new7  sxpetc.new13  sxpetc.new7  
cuxetc.new14  cuxetc.new8  pdata.new14  pdata.new8  sxpetc.new14  sxpetc.new8  
cuxetc.new15  cuxetc.new9  pdata.new15  pdata.new9  sxpetc.new15  sxpetc.new9


 
je veux renommer tous les *new* en *old*.
je saurais bien me débrouiller avec sed ou gawk mais c'est ds un fichier texte  :( .
J'ai pas trouvé d'options dans la man rename ou mv.
 
Aparemment il va falloir faire un for (avec un sed et un mv dedans).... Ca je saurai faire.
Si vous avez une commande miracle, ça serai chouette, sinon dite moi que non lol.
Merci si vous savez et bonne journée


Message édité par damcmoi le 12-09-2005 à 10:10:06
mood
Publicité
Posté le 12-09-2005 à 10:05:53  profilanswer
 

n°1197398
betsamee
Asterisk Zeperyl
Posté le 12-09-2005 à 10:09:04  profilanswer
 

ca veut dire quoi "c'est dans un fichier texte"

n°1197402
Elmoricq
Modérateur
Posté le 12-09-2005 à 10:11:46  profilanswer
 

En ksh :
 

$ for i in `\\ls -1 *new*` ; do
mv $i `echo $i | sed 's/new/old/' `
done


 
 
 
EDIT : grmbl d'interprétation du backslash dans les balises fixed et cpp :fou:


Message édité par Elmoricq le 12-09-2005 à 10:12:15
n°1197404
damcmoi
Posté le 12-09-2005 à 10:12:15  profilanswer
 

je veux dire de passer par un fichier texte... et donc par un script shell avec boucle et toute l'artillerie...
 
C'est juste que si ya une commande du genre  


rename *new* *old*


 ça serait denfer ;)

n°1197406
damcmoi
Posté le 12-09-2005 à 10:12:43  profilanswer
 

Merci les gars vous êtes trop rapides :)

n°1197408
betsamee
Asterisk Zeperyl
Posté le 12-09-2005 à 10:13:28  profilanswer
 

damcmoi a écrit :

je veux dire de passer par un fichier texte... et donc par un script shell avec boucle et toute l'artillerie...
 
C'est juste que si ya une commande du genre  


rename *new* *old*


 ça serait denfer ;)


 
a mon avis tu est force de passer par un script du style de celui conseille par Elmoricq

n°1197410
damcmoi
Posté le 12-09-2005 à 10:14:20  profilanswer
 

ok j'ai adopté le script :)  
Merci infiniment à vous deux.

n°1197414
0x90
Posté le 12-09-2005 à 10:15:48  profilanswer
 


rename new old *.new*


 
 
 
et si on tenait vraiment à utiliser une boucle pour faire lourd, en bash :


for f in *.new* ; do mv "$f" "${f/new/old}" ;done


Message édité par 0x90 le 12-09-2005 à 10:18:30

---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1197418
Elmoricq
Modérateur
Posté le 12-09-2005 à 10:19:38  profilanswer
 

betsamee a écrit :

a mon avis tu est force de passer par un script du style de celui conseille par Elmoricq


 
Ca se fait sur une ligne de commande.
On peut même le faire en une seule ligne (c'est laid) :
 

for i in `\ls -1 *new*` ; do mv $i `echo $i | sed 's/new/old/' ` ; done


 
 
Mais si tu disposes de rename (pas standard, en tout cas moi je l'ai pas sous Solaris :sweat: ), utilise-le.

n°1197420
0x90
Posté le 12-09-2005 à 10:21:22  profilanswer
 

Elmoricq a écrit :

Ca se fait sur une ligne de commande.
On peut même le faire en une seule ligne (c'est laid) :
 

for i in `\ls -1 *new*` ; do mv $i `echo $i | sed 's/new/old/' ` ; done


 
 
Mais si tu disposes de rename (pas standard, en tout cas moi je l'ai pas sous Solaris :sweat: ), utilise-le.


 
Sous nux il y est par défault il me semble [:spamafote], mais la syntaxe est légèrement différente. ( j'avais expliqué une fois il me semble dans un topic pourquoi ca pouvait pas être comme sous dos ), par contre, sous Ksh, t'as pas la feature ${i/new/old} ?  


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
mood
Publicité
Posté le 12-09-2005 à 10:21:22  profilanswer
 

n°1197425
Elmoricq
Modérateur
Posté le 12-09-2005 à 10:22:49  profilanswer
 

0x90 a écrit :

par contre, sous Ksh, t'as pas la feature ${i/new/old} ?


 
Nah, pas que je sache. Je viens de tester, ça ne fonctionne pas non plus.
Ca existe peut-être, je ne suis pas un guru du ksh, dans ce cas-là je veux bien savoir comment on fait ça peut m'intéresser.

n°1197427
betsamee
Asterisk Zeperyl
Posté le 12-09-2005 à 10:23:26  profilanswer
 

0x90 a écrit :


rename new old *.new*




 :jap:  
j'ai appris un truc super aujourd'hui  
 
rename old new *.old*


Message édité par betsamee le 12-09-2005 à 10:23:47
n°1197430
0x90
Posté le 12-09-2005 à 10:26:00  profilanswer
 

Elmoricq a écrit :

Nah, pas que je sache. Je viens de tester, ça ne fonctionne pas non plus.
Ca existe peut-être, je ne suis pas un guru du ksh, dans ce cas-là je veux bien savoir comment on fait ça peut m'intéresser.


 
Possible que ce soit du bash-only, en tout cas c'est super pratique d'eviter le ``/echo/pipe/sed et sur une grosse boucle la différence doit se faire sacrément sentir :/


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1197476
damcmoi
Posté le 12-09-2005 à 11:08:59  profilanswer
 

sinon je viens aussi de trouver sous debian (bash normalement)
 

rename 's/new/old/' *.new*


 
Merci encore les gars :)

n°1197478
0x90
Posté le 12-09-2005 à 11:09:59  profilanswer
 

oO, t'es sur de la syntaxe la ?


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1197479
damcmoi
Posté le 12-09-2005 à 11:11:13  profilanswer
 

oui
 
c sur la derniere sarge.
c une perl reg expr

n°1197480
0x90
Posté le 12-09-2005 à 11:13:38  profilanswer
 

tu peut faire un "rename --version" stp ?


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1197481
damcmoi
Posté le 12-09-2005 à 11:14:20  profilanswer
 

oui
2min fo que je reboot du coup lol
 
Bon alors c chaud.
j'ai pas de version pour le rename (j'ai essayé le --version et -v et le man)
La seule version que j'aie à la fin du man rename c'est :

perl v5.8.4  2005-03-08


 
sinon la syntaxe d'utilisation c'est :

rename [-v] [-n] [-f] perlexpr [files]


 
Pour info c la sarge sans ajouts, qui est en vente en ce moment chez les libraires  :??:
 
Edit http://wiki.linuxquestions.org/wiki/Rename qui explique différents rename selon les différentes distribs de linux.


Message édité par damcmoi le 12-09-2005 à 11:27:43
n°1197821
matafan
Posté le 12-09-2005 à 17:55:32  profilanswer
 

Elmoricq a écrit :

Nah, pas que je sache. Je viens de tester, ça ne fonctionne pas non plus.
Ca existe peut-être, je ne suis pas un guru du ksh, dans ce cas-là je veux bien savoir comment on fait ça peut m'intéresser.


Par contre tu peux toujours faire un truc du genre ${toto%new*}old${toto##*new} :

for f in *; do mv $f ${f%new*}old${f##*new}; done

n°1197860
0x90
Posté le 12-09-2005 à 19:50:59  profilanswer
 

damcmoi a écrit :

oui
2min fo que je reboot du coup lol
 
Bon alors c chaud.
j'ai pas de version pour le rename (j'ai essayé le --version et -v et le man)
La seule version que j'aie à la fin du man rename c'est :

perl v5.8.4  2005-03-08


 
sinon la syntaxe d'utilisation c'est :

rename [-v] [-n] [-f] perlexpr [files]


 
Pour info c la sarge sans ajouts, qui est en vente en ce moment chez les libraires  :??:
 
Edit http://wiki.linuxquestions.org/wiki/Rename qui explique différents rename selon les différentes distribs de linux.


 
Amusant qu'il y ait 2 rename tient ... vaut mieux y penser si on code des scripts destinés a être "universels" :/


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1197862
Elmoricq
Modérateur
Posté le 12-09-2005 à 19:54:49  profilanswer
 

matafan a écrit :

Par contre tu peux toujours faire un truc du genre ${toto%new*}old${toto##*new} :

for f in *; do mv $f ${f%new*}old${f##*new}; done



 
Euh.
Je vais devoir faire chauffer le manpage pour comprendre comment ça marche, ce truc-là.

n°1197877
0x90
Posté le 12-09-2005 à 20:20:57  profilanswer
 

je dirais que le 1er suprime les occurences de new* dans le string, et le second de *new, et entre les deux, on met old ... c'est crappy crappy tout ca :/ ( enfin ca marche, et surement mieux que sed )


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1197960
matafan
Posté le 12-09-2005 à 23:21:19  profilanswer
 

Oui c'est ca. Plus exactement, le % supprime la plus courte occurence de "new*" en fin de chaine, et le ## supprime la plus longue occurence de "*new" en debut de chaine.

n°1198138
0x90
Posté le 13-09-2005 à 10:16:36  profilanswer
 

Donc ca supprime le dernier new si le fichier s'appèle pwet.new01.canard.new02 .... ca peut être un comportement utile ...


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  renommer rapidement des fichiers

 

Sujets relatifs
Gestion des fichiers log et retour en arriere[RESOLU]probleme regroupage fichiers texte
Comparaison de 2 fichiersUpload via HTTP => impossible d'acceder aux fichiers
Transférer des fichiers avec Javalister les fichiers d'un répertoire
Batch --> regrouper plusieurs fichiers texte en un seulrenommer une variable
D6. Fichiers EXE trop lourds : 300 ko minimum ![JAVA] Problème de déplacement de fichiers
Plus de sujets relatifs à : renommer rapidement des fichiers


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR