Rename des fichiers avec la date sous Linux 2
Résolu
baborge
Messages postés
94
Statut
Membre
-
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité -
lami20j Messages postés 21644 Statut Modérateur, Contributeur sécurité -
Salut a tous
vous m'avez aider
a renommer tous les fichiers d'un répertoire sous LINUX avec une commande en shell:
mais lors de ma demande, je n'avais préciser que les fichiers sont sous la forme :
alors que j'ai d'autres fichiers dans ce répertoire:
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
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
A voir également:
- Rename des fichiers avec la date sous Linux 2
- Supercopier 2 - Télécharger - Gestion de fichiers
- Comment réduire la taille d'un fichier - Guide
- Renommer des fichiers en masse - Guide
- Linux reader - Télécharger - Stockage
- Fichiers epub - Guide
4 réponses
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;
}
Re,
de rien.
Petite question. As-tu compris la pourquoi ton regex ne te satisfaisait pas?
Et celui là oui?
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.
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.
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.
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;
}