J'ai plusieurs fichiers nommés par date et j'essaie d'effectuer un changement de nom par lot.
ils se présentent comme suit :
dd-mm-yyyy or dd.mm.yyyy or ddjanyyyy
et j'essaie de normaliser tout le monde comme ça :
yyyy-mm-dd-file-name-default
J'ai plusieurs fichiers nommés par date et j'essaie d'effectuer un changement de nom par lot.
ils se présentent comme suit :
dd-mm-yyyy or dd.mm.yyyy or ddjanyyyy
et j'essaie de normaliser tout le monde comme ça :
yyyy-mm-dd-file-name-default
Si vous n'avez besoin que d'"ajuster l'ordre des caractères", c'est assez simple avec l'outil Perl rename
à l'aide de groupes de capture et de références croisées.
Ex. donné
$ ls
000000 02jan1999 19.11.2017 23-11-2012 file
では
$ rename -n 's/(\d{2})[-.](\d{2})[-.](\d{4})/$3-$2-$1-file-name-default/' *
rename(19.11.2017, 2017-11-19-file-name-default)
rename(23-11-2012, 2012-11-23-file-name-default)
En revanche, si vous souhaitez effectuer des conversions de dates telles que jan
--> 01
mais c'est un peu plus compliqué. Vous pouvez écrire votre propre table de recherche en utilisant un hachage, ou utiliser la fonction strptime
y strftime
fournies par les méthodes Time::Piece
module :
$ rename -n '
BEGIN{use Time::Piece};
my $dt;
eval {
$dt = Time::Piece->strptime($_,"%d-%m-%Y");
} or do {
eval {
$dt = Time::Piece->strptime($_,"%d.%m.%Y");
} or do {
eval {
$dt = Time::Piece->strptime($_,"%d%b%Y");
} or return;
}
};
$_ = $dt->strftime("%Y-%m-%d-file-name-default")
' *
rename(02jan1999, 1999-01-02-file-name-default)
rename(19.11.2017, 2017-11-19-file-name-default)
rename(23-11-2012, 2012-11-23-file-name-default)
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.