Téléchargement
illégal
Posez votre question Signaler

Rename des fichiers avec la date sous Linux 2 [Résolu]

baborge 89Messages postés 6 juin 2004Date d'inscription 20 mars 2010Dernière intervention - Dernière réponse le 5 mars 2006 à 16:38
Salut a tous

vous m'avez aider
a renommer tous les fichiers d'un répertoire sous LINUX avec une commande en shell:

#! /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/ovh/sauveDB/*.sql"; 
foreach (@fic){
        (my $new_name = $_)=~ s/(\d+)(\.sql)/$1_$a-$m-$j$2/;
        rename $_,$new_name;
}


mais lors de ma demande, je n'avais préciser que les fichiers sont sous la forme :

1.sql
2.sql
...
100.sql



alors que j'ai d'autres fichiers dans ce répertoire:

mysql.sql
compteur.sql
etc...


et la commande précédante ne les prends pas en compte...

pouvez vous me donner un coup de main supplémentaire...

Merci d'avance

laurent
Lire la suite 

Rename des fichiers avec la date sous Linux 2 »

4 réponses
Réponse
+0
moins plus
Salut,

#! /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/ovh/sauveDB/*.sql"; pas besoin

foreach (glob "/home/ovh/sauveDB/*.sql"){
 (my $new_name = $_)=~ s/^    # début de chaine
                         (.*) # tout caractère 
                         (?=\.sql)
			      # test avant .sql (ne consomme pas de texte)
                        /$1_$a-$m-$j/x;
        rename $_,$new_name;
}
Ajouter un commentaire
Réponse
+0
moins plus
Re

Merci lami20j

tout marche super

@+

laurent
Ajouter un commentaire
Réponse
+0
moins plus
Re,

de rien.

Petite question. As-tu compris la pourquoi ton regex ne te satisfaisait pas?
s/(\d+)(\.sql)/$1_$a-$m-$j$2/


Et celui là oui?
s/^      # début de chaine
    (.*) # tout caractère 
    (?=\.sql)
     # test avant .sql (ne consomme pas de texte)
 /$1_$a-$m-$j/x;


C'est bien de comprendre pourqoui et aussi d'étudier tout les cas puisque la regex que je t'ai donné n'est pas parfaite.

Comment se comportera elle sur des fichiers dont le nom est

aaa.SQL

ou

aaa.sql.sql

ou encore

01.sql.02.sql

?

Même si tu dit que ça ne serez pas le cas, on ne sait jamais.
A toi de voir.
Ajouter un commentaire
Réponse
+0
moins plus
Re,

voilà encore un version dans laquelle on n'a pas des références arrières. Un seul test avant pour tester l'extension fait l'affaire.
#! /usr/bin/perl -w

use strict;

foreach (glob "/home/ovh/sauveDB/*.sql"){
  (my $new_name = $_)=~ s/(?=\.sql)/'_' . `date +%F`/e;
  $new_name =~ s/\n//; # le résultat de date contient un \n
  rename $_,$new_name;
}
Ajouter un commentaire
Ce document intitulé « rename des fichiers avec la date sous Linux 2 » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?