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 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 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 :
Mais comment ecrire le Nouveau Nom pour que cela ressemble à mon exemple?
Merci pour vos réponses.
Laurent
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
A voir également:
- Renommer fichier linux
- Fichier bin - Guide
- Fichier epub - Guide
- Renommer fichier en masse - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
8 réponses
Salut,
Essaie ça :
;-))
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/"`;doneLa commande est sur une seule et même ligne à partir du "for...".
;-))
Merci pour ta réponse jipicy
mais ça marche pO...
Voila le message que j'obtiens:
Je continue a chercher...
Laurent
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
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
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
Merci pour ta réponse Dal
mais ça marche pO non plu...
Voila ce que j'obtiens:
et non
il manque la date...
Je continue a chercher...
Laurent
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonsoir à tous,
ça m'étonnerait si on n'avait pas la version sed de jipicy.
Voilà une version perl.
Exécution:
a+
lami20j
ç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
Re-
Ben voilà ce que ça donne chez moi, et je n'aurai pas posté sans en avoir fait le test... ;-))
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]$;-))
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 ;-))
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 ;-))
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
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;