Developpez.com

Club des développeurs et IT pro
Plus de 4 millions de visiteurs uniques par mois

Comment renommer, copier ou déplacer un fichier proprement en Perl ?

Renommer, copier ou déplacer des fichiers reste basique en Perl, mais il y a des subtilités à connaître pour éviter de mauvaises surprises.

6 commentaires Donner une note à l'article (5)

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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 :

Renommer un fichier
Sélectionnez
#!/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.

Renommer le fichier en utilisant move
Sélectionnez
#!/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 :

Droit sur le fichier
Sélectionnez
/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.txt

On constate que l'on a un fichier avec des droits « 600 » sur le fichier « fichier1.txt ». Déplaçons-le :

Copie du fichier - copy
Sélectionnez
#!/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: $!";
Résultat - copy
Sélectionnez
# ls -alh /tmp/fichier1.txt
-rw-r--r-- 1 root root 7 juil. 24 14:27 /tmp/fichier1.txt

Les 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.

cp
Sélectionnez
#!/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.

 
Sélectionnez
# ls -alh /tmp/fichier1.txt
-rw------- 1 root root 7 juil. 24 15:15 /tmp/fichier1.txt

Voilà, le problème est résolu !

III. Déplacer un fichier

Pour déplacer un fichier en Perl, vous avez au moins trois solutions :

  1. rename (fonction de Perl). Attention à la remarque ci-dessusRenommer un fichiers ;
  2. move (issu de File::Copy), mais vous perdrez les droits sur le fichier comme vu ci-dessusCopier un fichier ;
  3. 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.

Exemple de code
Sélectionnez
#!/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: $!";

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2014 djibril. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.