I. Renommer un fichier▲
Bien qu'il soit simple de renommer un fichier, il y a certaines subtilités pendant le renommage ou la copie via les fonctions Perl.
Voici un exemple avec la fonction rename de Perl :
#!/usr/bin/perl
use strict;
use warnings;
# /home et /tmp sont sur deux disques différents
my $fichier = '/home/djibril/youtube.pl';
my $fichier_destination = '/tmp/youtube.pl';
rename $fichier, $fichier_destination or die "rename failed: $!";Si le fichier de destination se trouve sur un autre disque physique, sous Linux par exemple, vous aurez ce message : « Lien croisé de périphérique invalide. »
Dans ce cas, la solution consiste à ne pas utiliser cette fonction, mais plutôt la fonction move disponible dans le module File::Copy déjà disponible dans le core de Perl.
#!/usr/bin/perl
use strict;
use warnings;
use File::Copy qw/move/;
# /home et /tmp sont sur deux disques différents
my $fichier = '/home/djibril/youtube.pl';
my $fichier_destination = '/tmp/youtube.pl';
move($fichier, $fichier_destination) or die "move failed: $!";Voilà, souci résolu, quoique, lisez la suite !
II. Copier un fichier▲
Pour copier un fichier en Perl, il n'existe pas de fonction interne à Perl. Vous devez utiliser la fonction copy du module File::Copy. Pas besoin d'installer ce module, il est déjà présent dans le core de Perl. Voici un exemple basique :
/tmp/TEST-COPY# ll
total 12K
drwxr-xr-x 2 root root 4,0K juil. 24 14:22 .
drwxrwxrwt 7 root root 4,0K juil. 24 14:22 ..
-rw------- 1 root root 7 juil. 24 14:08 fichier1.txtOn constate que l'on a un fichier avec des droits « 600 » sur le fichier « fichier1.txt ». Déplaçons-le :
#!/usr/bin/perl
use strict;
use warnings;
use File::Copy qw/ copy /;
# /home et /tmp sont sur deux disques différents
my $fichier = '/tmp/TEST-COPY/fichier1.txt';
my $repertoire = '/tmp';
copy( $fichier, $repertoire ) or die "Copy failed: $!";# ls -alh /tmp/fichier1.txt
-rw-r--r-- 1 root root 7 juil. 24 14:27 /tmp/fichier1.txtLes droits sur le fichier ne sont pas conservés. Pour pallier ce souci, le module dispose d'un alias à copy se nommant cp qui conserve les droits.
#!/usr/bin/perl
use strict;
use warnings;
use File::Copy qw/ cp /;
# /home et /tmp sont sur deux disques différents
my $fichier = '/tmp/TEST-COPY/fichier1.txt';
my $repertoire = '/tmp';
cp( $fichier, $repertoire ) or die "Copy failed: $!";Après suppression du fichier « /tmp/fichier1.txt », on relance notre programme Perl.
# ls -alh /tmp/fichier1.txt
-rw------- 1 root root 7 juil. 24 15:15 /tmp/fichier1.txtVoilà, le problème est résolu !
III. Déplacer un fichier▲
Pour déplacer un fichier en Perl, vous avez au moins trois solutions :
- rename (fonction de Perl). Attention à la remarque ci-dessusRenommer un fichiers ;
- move (issu de File::Copy), mais vous perdrez les droits sur le fichier comme vu ci-dessusCopier un fichier ;
- mv (issu de File::Copy) avec les permissions préservées sur le fichier.
Il est important de garder à l'esprit toutes ces subtilités afin d'éviter de mauvaises surprises.
#!/usr/bin/perl
use strict;
use warnings;
use File::Copy qw/ move mv /;
my $fichier1 = '/tmp/TEST-COPY/fichier1.txt';
my $fichier2 = '/tmp/TEST-COPY/fichier2.txt';
my $repertoire = '/tmp';
move( $fichier1, $repertoire ) or die "move failed: $!";
mv( $fichier2, $repertoire ) or die "mv failed: $!";



