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

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Petit script bash [resolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Petit script bash [resolu]

n°1120175
dolan
Made in madinina
Posté le 09-03-2009 à 21:57:25  profilanswer
 

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
mood
Publicité
Posté le 09-03-2009 à 21:57:25  profilanswer
 

n°1120179
Modération
Posté le 09-03-2009 à 22:06:43  answer
 

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)

n°1120180
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 09-03-2009 à 22:07:46  profilanswer
 

man rename ;)


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°1120182
o'gure
Modérateur
Multi grognon de B_L
Posté le 09-03-2009 à 22:17:52  profilanswer
 

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 !
n°1120183
dolan
Made in madinina
Posté le 09-03-2009 à 22:21:47  profilanswer
 

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.

n°1120184
dolan
Made in madinina
Posté le 09-03-2009 à 22:23:36  profilanswer
 


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)

n°1120187
dolan
Made in madinina
Posté le 09-03-2009 à 22:25:22  profilanswer
 

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
n°1120196
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 09-03-2009 à 23:10:26  profilanswer
 

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.
n°1120197
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 09-03-2009 à 23:11:21  profilanswer
 

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.
n°1120198
dolan
Made in madinina
Posté le 09-03-2009 à 23:17:11  profilanswer
 

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

mood
Publicité
Posté le 09-03-2009 à 23:17:11  profilanswer
 

n°1120199
dolan
Made in madinina
Posté le 09-03-2009 à 23:18:31  profilanswer
 

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 :/  

n°1120212
sputnick
bip...bip...bip...bip...bi...b
Posté le 10-03-2009 à 03:19:49  profilanswer
 

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

n°1120331
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 10-03-2009 à 11:24:32  profilanswer
 

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.
n°1120380
sputnick
bip...bip...bip...bip...bi...b
Posté le 10-03-2009 à 12:30:29  profilanswer
 

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

n°1120443
dolan
Made in madinina
Posté le 10-03-2009 à 14:49:09  profilanswer
 

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
n°1120482
sputnick
bip...bip...bip...bip...bi...b
Posté le 10-03-2009 à 15:47:58  profilanswer
 

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
$

n°1121258
dolan
Made in madinina
Posté le 12-03-2009 à 15:17:05  profilanswer
 

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 ;)

n°1122649
sputnick
bip...bip...bip...bip...bi...b
Posté le 17-03-2009 à 21:05:53  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Petit script bash [resolu]

 

Sujets relatifs
[bash] Extinction auto du pc si idle et eth0 non sollicité[résolu] Connecter un ipod en adhoc avec wicd
[Resolu]Probleme Config Autoscan Network sous BT3 Final[résolu] Cryptage du mot de passe sous courier IMAP et LDAP
[Bash] Script de création de clés SSH automatique[résolu] [iptables] configuration du traffic entrant
[Résolu] [dd] Comment écrire une chaine sur l'intégralité d'un disque?lpr -o : comment modifier options configurables via GUI [RESOLU]
[shell script] Compter des repertoires[Bash] Il me faudrait un petit script ... [Resolu]
Plus de sujets relatifs à : Petit script bash [resolu]


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