Rechercher : dans
Par :

Renommer des fichiers avec la date sous linux

Dernière réponse le 3 mai 2007 à 15:09:03 baborge, le 17 jan 2006 à 18:49:05 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « renommer des fichiers avec la date sous linux » dans :
Fichier DAT Voir Format DAT Un fichier DAT Un fichier .dat est un fichier de données (.DAT signifie data). En général, il s'agit d'un fichier binaire, créé par un programme et utilisable uniquement par ce programme, ce qui signifie qu'il n'est pas censé être ouvert...
L'arborescence du système de fichiers de Linux VoirLinux possède de nombreux répertoires, et ils ont chacun leur rôle. (Note: D'une distribution à l'autre, ces répertoires peuvent être différents.) Sous Windows, un fichier est un fichier. Sous Linux, un fichier peut représenter: un fichier, un...
Linux - L'arborescence des fichiers VoirLa hiérarchie des fichiers sous Linux Pour assurer la compatibilité et la portabilité, les systèmes Linux respectent l'unique norme FHS (File Hierarchy Standard). La hiérarchie de base est la suivante : /la racine, elle contient les...

1

jipicy, le 17 jan 2006 à 19:27:33

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...".
;-)) Z'@+...che et Bonne Année 2006.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. 

Répondre à jipicy

2

baborge, le 17 jan 2006 à 19:38:08

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

Répondre à baborge

3

[Dal], le 17 jan 2006 à 19:45:38

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

Répondre à [Dal]

11

jipicy, le 18 jan 2006 à 07:49:10

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 Z'@+...che et Bonne Année 2006.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. 

Répondre à jipicy

12

 [Dal], le 18 jan 2006 à 10:45:20

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

Répondre à [Dal]

4

baborge, le 17 jan 2006 à 19:59:32

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

Répondre à baborge

5

lami20j, le 17 jan 2006 à 19:59:50

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

Répondre à lami20j

6

jipicy, le 17 jan 2006 à 20:08:06

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]$
;-)) Z'@+...che et Bonne Année 2006.
JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. 

Répondre à jipicy

8

lami20j, le 17 jan 2006 à 20:18:57

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+

Répondre à lami20j

9

jipicy, le 17 jan 2006 à 20:26:22

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 ;-)) Z'@+...che et Bonne Année 2006.

JP : Zen, my Nuggets ! ;-)
Le savoir n'est bon que s'il est partagé. 

Répondre à jipicy

7

lami20j, le 17 jan 2006 à 20:10:24

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;

Répondre à lami20j

10

baborge, le 17 jan 2006 à 21:45:11

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

Répondre à baborge
Collection CommentÇaMarche.net