Petit script bash [resolu]

Petit script bash [resolu] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 09-03-2009 à 21:57:25    

Hi
J'ai des fichiers qui sont appelés par des nombre et je souhaitais faire un tout petit script bash pour les renommer en ajoutant 1 a la valeur numérique du nom du fichier.
Cela a l'air tout con, mais dans ma noobitude, je n'y arrive pas.  
 
j'ai essaye ca:

Code :
  1. for f in *; x=$(($f+1)) ; do mv $f $x  ; done


ca donne "bash: syntax error near unexpected token `x=$(($f+1))'
 
Si je définis ma variable avant comme étant un nombre la fin du script fonctionne.  

Code :
  1. f=5;x=$(($f+1));echo $x


me donne bien 6
 
et le reste du script qui permet de renomme fonctionne aussi

Code :
  1. for f in *; do cp $f test$f; done


 
Si je recherche la variable  avec la boucle for cela ne fonctionne pas.
Si quelqu'un a la solution en bash ce serait sympa, merci :)

Message cité 1 fois
Message édité par dolan le 09-03-2009 à 23:18:55

---------------
Topic A7N8X - Topic UX32VD
Reply

Marsh Posté le 09-03-2009 à 21:57:25   

Reply

Marsh Posté le 09-03-2009 à 22:06:43    

dolan
Merci d'enlever le help dans ton titre, nous nous doutons que tu requiers de l'aide.
(édition du premier post, petite icône avec un crayon)

Reply

Marsh Posté le 09-03-2009 à 22:07:46    

man rename ;)


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 09-03-2009 à 22:17:52    

sinon  il y a pyrenamer, par exemple.

Message cité 1 fois
Message édité par o'gure le 09-03-2009 à 22:18:42

---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 09-03-2009 à 22:21:47    

Modération a écrit :

dolan
Merci d'enlever le help dans ton titre, nous nous doutons que tu requiers de l'aide.
(édition du premier post, petite icône avec un crayon)


lol oui sorry, j'en oublie les fondamentaux du forum.

Reply

Marsh Posté le 09-03-2009 à 22:23:36    


C'est sympa mais voici le man un peu spartiate:

Code :
  1. NAME
  2.        rename - Rename files
  3. SYNOPSIS
  4.        rename from to file...
  5. DESCRIPTION
  6.        rename  will  rename  the specified files by replacing the first occur-
  7.        rence of from in their name by to.
  8.        For example, given the files foo1, ..., foo9, foo10, ...,  foo278,  the
  9.        commands
  10.               rename foo foo0 foo?
  11.               rename foo foo0 foo??
  12.        will turn them into foo001, ..., foo009, foo010, ..., foo278.
  13.        AndCel
  14.               rename .htm .html *.htm
  15.        will fix the extension of your html files.
  16. SEE ALSO
  17.        mmv(1), mv(1)

Reply

Marsh Posté le 09-03-2009 à 22:25:22    

o'gure a écrit :

sinon  il y a pyrenamer, par exemple.


Je ne peux malheureusement pas utiliser de softs car je n'ai pas les droits d'admin sur ma machine de travail de toute façon.

Message cité 1 fois
Message édité par dolan le 09-03-2009 à 22:30:25
Reply

Marsh Posté le 09-03-2009 à 23:10:26    

dolan a écrit :

Hi
j'ai essaye ca:

Code :
  1. for f in *; x=$(($f+1)) ; do mv $f $x  ; done


ca donne "bash: syntax error near unexpected token `x=$(($f+1))'


 
Normal que ça ne marche pas, après for tu dois mettre un do, et pas définir x avant le do :

for f in *; do
     x=blabla
     mv a b
done


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 09-03-2009 à 23:11:21    

dolan a écrit :


Je ne peux malheureusement pas utiliser de softs car je n'ai pas les droits d'admin sur ma machine de travail de toute façon.


 
 
on peut utiliser/installer un soft sans être admin hein  :o


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 09-03-2009 à 23:17:11    

Xavier_OM a écrit :


 
Normal que ça ne marche pas, après for tu dois mettre un do, et pas définir x avant le do :

for f in *; do
     x=blabla
     mv a b
done



Merci de ton aide  :jap:  
Je le savais bien que c'était simple :D

Reply

Marsh Posté le 09-03-2009 à 23:17:11   

Reply

Marsh Posté le 09-03-2009 à 23:18:31    

Xavier_OM a écrit :


on peut utiliser/installer un soft sans être admin hein  :o


Tout a fait, mais vu mon niveau, a chaque fois que je m'y suis frotte j'ai vraiment galéré. En général ça finit par une dépendance qui manque quelque part :/  

Reply

Marsh Posté le 10-03-2009 à 03:19:49    

Citation :


$ touch {20..10}
$ ls
10  11  12  13  14  15  16  17  18  19  20
$ for i in {20..10}; do mv $i $((i+1)); done
$ ls
11  12  13  14  15  16  17  18  19  20  21

Reply

Marsh Posté le 10-03-2009 à 11:24:32    

dans tous les cas faut bien être conscient que si 1->2 puis 2->3 puis 3->... on promène le même fichier d'un bout à l'autre...


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 10-03-2009 à 12:30:29    

Oui, ya une couille, c'était pour voir si vous suiviez  :D  
Il faut passer par des fichiers temporaire ou recopier dans un autre repertoire :
 

Code :
  1. $ for i in {10..20}; do echo $i > $i; done
  2. $ ls
  3. 10  11  12  13  14  15  16  17  18  19  20
  4. $ mkdir temp
  5. $ for i in {10..20}; do mv $i temp/$((i+1)); done
  6. $ ls temp
  7. 11  12  13  14  15  16  17  18  19  20  21
  8. $ cat temp/21
  9. 20

Reply

Marsh Posté le 10-03-2009 à 14:49:09    

En tout cas même si ça ne casse pas trois pattes a un canard voici le modeste script que j'ai utilise grâce a votre aide:

Code :
  1. for f in *; do y=${f/.pdb/}
  2. w=${y/exp_/} ; x=$(($w+1))
  3. echo $x
  4. mv $f $x.pdb
  5. done


qui transforme mes fichier :

exp_001.pdb exp_758.pdb exp_37.pdb ...


 
Il enlevant le prefixe "exp_: et incrémente le nombre.  
Je suppose qu'il y avait plus simple, mais comme on dit, l'essentiel est dans lactel.  
Tant que ça fonctionne, moi ça me va :)
Merci a tous pour vos interventions.


Message édité par dolan le 10-03-2009 à 14:50:20

---------------
Topic A7N8X - Topic UX32VD
Reply

Marsh Posté le 10-03-2009 à 15:47:58    

Ah ouais, par ce que tes fichiers s'appellent "exp_N.pdb" et tu peux retirer le prefixe ?! Ca aurait été tres utile de le préciser dès le départ hein... ^^
 
Deplus, c'est "cool" que tu te serve des "parameter expansion", mais il y a un plus adapté pour ce que tu fait :

Citation :

$ var=exp_001.pdb
$ echo ${var%.pdb}
exp_001
$ echo ${var#exp_}
001.pdb
$

Reply

Marsh Posté le 12-03-2009 à 15:17:05    

mmm, mais je ne suis même pas certain de comprendre :D
Plus sérieusement je crois voir ce que ça fait, il ne me reste plus qu'à essayer ;)

Reply

Marsh Posté le 17-03-2009 à 21:05:53    

Le mieux c'est encore de demander ce que tu ne comprend pas.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed