Renommer des fichiers avec la date sous linux

Résolu
baborge Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   -  
[Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à toutes & tous

Je suis novice sous linux, et je cherche a renommer tous les fichiers d'un répertoire de la façon suivante:

rep: /home/test/

1.sql
2.sql
..
100.sql

en

1-2006-01-17.sql
2-2006-01-17.sql
..
100-2006-01-17.sql


Je connais quand même la cde :
$ date +%Y-%m-%d
mv /home/test/*.sql /home/test/Nouveau Nom.sql


Mais comment ecrire le Nouveau Nom pour que cela ressemble à mon exemple?

Merci pour vos réponses.

Laurent

8 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Essaie ça :
    VAR=`date +%Y-%m-%d`
    for i in $(ls *.sql); do mv $i `echo $i | sed "s/^\([0-9][0-9]*\)\(\.[a-z]*\)/\1-$VAR\2/"`;done
    La commande est sur une seule et même ligne à partir du "for...".
    ;-))
    0
  2. baborge Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   33
     
    Merci pour ta réponse jipicy
    mais ça marche pO...

    Voila le message que j'obtiens:
    mv: 10.sql' and 10.sql' are the same file
    


    Je continue a chercher...

    Laurent
    0
  3. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Essaye en remplaçant l'expression régulière sed par celle-ci :

    sed "s/\(.*\)\(.sql\)/\1-$VAR\2/"

    Il faut que tu n'aies que des fichiers de la forme que tu as indiqué dans ce répertoire par mesure de sécurité.

    Cependant, chez moi, l'expression régulière de Jipicy fonctionne.

    Dal
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Salut [Dal],

      Désolé j'ai un peu zappé ton message, ainsi que ton expression régulière, 100 fois plus simple et bien meilleure que "mamienne".

      Y'a des jours comme ça où pourquoi faire simple quand on peut faire compliqué, hein ? Je vous le demande !
      :-DDD
      0
      1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        C'est pas grave, l'important c'est que çà marche.

        Pour le "fun" (on s'amuse comme on peut), si on veut, on peut aussi le faire en une seule ligne, sans variable, par exemple comme çà :

        ls -1 *.sql | sed "s/\(.*\)\(.sql\)/mv \1\2 \1-`date +%Y-%m-%d`\2/" | sh


        Dal
        0
  4. baborge Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   33
     
    Merci pour ta réponse Dal
    mais ça marche pO non plu...

    Voila ce que j'obtiens:
    1.sql   = >>    1-.sql


    et non
    1.sql   = >>    1-2006-01-16.sql


    il manque la date...

    Je continue a chercher...

    Laurent
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Bonsoir à tous,

    ça m'étonnerait si on n'avait pas la version sed de jipicy.

    Voilà une version perl.
    #! /usr/bin/perl -w
    
    use strict;
    
    my ($jour,$mois,$annee)=(localtime)[3,4,5];
    
    my $j = sprintf("%02d",$jour);
    my $m = sprintf("%02d",$mois+1);
    my $a = $annee+1900;
    
    my @fic = glob "/home/lamitest/test/*.sql";
    foreach (@fic){
            (my $new_name = $_)=~ s/(\d+)(\.sql)/$1-$a-$m-$j$2/;
            rename $_,$new_name;
    

    Exécution:
    [lamitest@localhost ~]$ ls -l test/
    total 0
    -rw-rw-r--  1 lamitest lamitest 0 jan 17 20:03 100.sql
    -rw-rw-r--  1 lamitest lamitest 0 jan 17 20:02 10.sql
    -rw-rw-r--  1 lamitest lamitest 0 jan 17 20:02 1.sql
    -rw-rw-r--  1 lamitest lamitest 0 jan 17 20:02 2.sql
    [lamitest@localhost ~]$ perl rename_date.pl
    [lamitest@localhost ~]$ ls -l test/
    total 0
    -rw-rw-r--  1 lamitest lamitest 0 jan 17 20:03 100-2006-01-17.sql
    -rw-rw-r--  1 lamitest lamitest 0 jan 17 20:02 10-2006-01-17.sql
    -rw-rw-r--  1 lamitest lamitest 0 jan 17 20:02 1-2006-01-17.sql
    -rw-rw-r--  1 lamitest lamitest 0 jan 17 20:02 2-2006-01-17.sql
    


    a+
    lami20j
    0
  7. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Re-

    Ben voilà ce que ça donne chez moi, et je n'aurai pas posté sans en avoir fait le test... ;-))
    [jp@Mandrake tmpfs]$ ls -1
    10.sql
    1.sql
    2.sql
    3.sql
    4.sql
    5.sql
    6.sql
    7.sql
    8.sql
    9.sql
    
    [jp@Mandrake tmpfs]$ VAR=`date +%Y-%m-%d`
    
    [jp@Mandrake tmpfs]$ echo $VAR
    2006-01-17
    
    [jp@Mandrake tmpfs]$ for i in $(ls *.sql); do mv $i `echo $i | sed "s/^\([0-9][0-9]*\)\(\.[a-z]*\)/\1-$VAR\2/"`;done
    
    [jp@Mandrake tmpfs]$ ls -1
    10-2006-01-17.sql
    1-2006-01-17.sql
    2-2006-01-17.sql
    3-2006-01-17.sql
    4-2006-01-17.sql
    5-2006-01-17.sql
    6-2006-01-17.sql
    7-2006-01-17.sql
    8-2006-01-17.sql
    9-2006-01-17.sql
    
    [jp@Mandrake tmpfs]$
    ;-))
    0
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Salut jipicy,

      et je n'aurai pas posté sans en avoir fait le test... ;-))
      J'en suis certain. Il a du faire une erreur quelque part.

      a+
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
         
        Salut Laurent,

        Il a du faire une erreur quelque part
        Ca c'est presque sur, entre les quotes, les doubles-quotes et les quotes inversées (elles y sont toutes dans la syntaxe :-)) ), il en faut peu pour que ça déraille :-DD

        baborge ==>> Poste-nous la ligne de commande que tu tapes et le listing de ton répertoire aussi...s'il te plaît, merci ;-))
        0
  8. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Re,
    Je suis novice sous linux en ce cas j'aurais du détailler un peu.

    Donc ce que tu vois ici tu dois copier dans un fichier dont tu le nommes comment tu veux.
    Ensuite il faut voir dans quel répertoire tu travaille et modifier dans le script (voir le commentaire - mets ici ton répertoire).

    Tu n'as que à taper perl nom_de_ton_script

    #! /usr/bin/perl -w
    
    use strict;
    
    my ($jour,$mois,$annee)=(localtime)[3,4,5];
    
    my $j = sprintf("%02d",$jour);
    my $m = sprintf("%02d",$mois+1);
    my $a = $annee+1900;
    
    my @fic = glob "/home/lamitest/test/*.sql"; # mets ici ton répertoire
    foreach (@fic){
            (my $new_name = $_)=~ s/(\d+)(\.sql)/$1-$a-$m-$j$2/;
            rename $_,$new_name;
    0
  9. baborge Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   33
     
    Merci Messieurs,

    et excuser moi pour les messages d'erreur qui n'étaient dus qu'a moi...

    des erreur dans le copier - coller

    encore merci
    et bonne soirée

    Laurent
    0