Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1668 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Determiner quota disk user && taille totale du répertoire de user

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Determiner quota disk user && taille totale du répertoire de user

n°714425
ml01
Posté le 03-05-2004 à 16:39:52  profilanswer
 

Bonjour,
 
1--> J'aimerai savoir s'il existe un moyen en perl de déterminer le quota disk d'un utilisateur (on connait le nom de l'utilisateur, iud, adresse repertoire perso).
commande sous unix équivalente :  
  quota nomUser
 
J'ai testé les commandes ci dessous, mais le résultat=256 :
  my $quotaUser = system ("quota -Q".$NomUser);
OU
  my @quotaUser = system ("quota -Q".$NomUser);
 
________________________
________________________
2--> Autrement j'aimerai connaître un moyen qui permet de définir la taille totale d'un répertoire (composé de fichiers, de sous répertoires, sous-sous répertoires...)
 
* J'ai testé la commande :
     use File::stat;
     my $sizeFile = stat($Chemin/$repertoire);
     ->Cette commande ne doit servir uniquement pour connaître la taille d'un fichier et non d'un dossier ??
     -> Résultat :: 4096 (équivaut ls -lsh sous unix - 4096blocks nécessaire pour stocker info sur le dossier lui même - <i>nom-emplacement-...</i>
 
 
* J'ai testé la commande ci dessous:
      my $sizeFile = system ("du -lsh ".$Répertoire);
      ->Résultat quel que soit l'utlisateur et la taille du répertoire :: 256  
      ->J'aurai voulu obtenir l'équivalent de la commande "du -lsh" sous unix
 
* J'ai testé la solution donnée dans le forum - perl -page6; mais ça fonctionne pas!!
 
Code :

Citation :


  opendir(DIR, ${path_perso}/$name) or die "impossible d'ouvire $name: $!";  
  my $taillef = 0;  
  while (defined($file = readdir(DIR))) {  
        if ($file !~ /^\.\.?$/) {  
              # pas '..' et '.'  
              $taillef += (stat $file)[7];  
        }  
  }  
  closedir(DIR);  
  print $taillef;  


 
 
DONC EN RESUME ::
si vous connaissez les équivalences des commandes unix 'quota userName' ET 'du -lsh Chemin/Répertoire' pour PERL
Merci de bien vouloir me répondre.

 
Merci par avance.

mood
Publicité
Posté le 03-05-2004 à 16:39:52  profilanswer
 

n°714477
anapajari
s/travail/glanding on hfr/gs;
Posté le 03-05-2004 à 17:19:45  profilanswer
 

1- system ne retourne rien pas la sortie d'un commande:
[quote=http://www.perl-gratuit.com/traduction/docfr/perlfunc.html#item_system]
La valeur retournée est le statut de sortie (exit status) du programme tel que retourné par l'appel wait(). Pour obtenir la valeur réelle de sortie, il faut le diviser par 256. Voir aussi exec. Ce n'est PAS ce qu'il faut utiliser pour capturer la sortie d'une commande. Pour cela regarder les apostrophes inversées (backticks) ou qx// comme décrit dans `CHAINE` in the perlop manpage.[/quote]
De plus l'option -Q moi connait pas...
 
2- idem pour system, mais tu dois avoir un module dans cpan tout fait, sinon rien ne t'empeche de faire une fonction dans le genre:

Code :
  1. #!/usr/bin/perl -w
  2. use strict;
  3. my $dir='/home/';
  4. print repSize($dir,0)."\n";
  5. exit;
  6. sub repSize
  7. {
  8. my $currentdir = shift;
  9. my $currentsize = shift;
  10. opendir(D,$currentdir) or die "Can't open $currentdir: $!\n";
  11. my @files=readdir(D);
  12. close(D);
  13. for(@files)
  14. {
  15.   if (-d "$currentdir/$_" && $_ ne '.' && $_ ne '..')
  16.   {
  17.     $currentsize+=repSize("$currentdir/$_", $currentsize);
  18.   }
  19.   else
  20.   {
  21.     $currentsize+=(-s "$currentdir/$_" );
  22.   }
  23. }
  24. return $currentsize;
  25. }


attention, le resultat doit être à diviser par 8 si tu le veux en octets!


Message édité par anapajari le 03-05-2004 à 17:21:58
n°715929
ml01
Posté le 05-05-2004 à 11:01:21  profilanswer
 

J'ai compris d'où venait l'erreur. Dans la ligne :

Citation :

$du = `du -lsh `.$RepUser;


Je n'intégrais pas le chemin du 'répertoire utilisateur' dans les backticks(``), donc la commande retournait la taille disque utilisée par le répertoire courrant (CàD répertoire où est stocké mon fichier .pl), d’où l’affichage récursif de 96k qelq soit le répertoire utilisateur.
 
Par contre, si je fais:

Citation :

$du = `du -lsh $RepUser`;


Aucune valeur n'est retournée, car "Permission denied". En effet, sous Unix j'effectue la commande "du -lsh Répertoire" avec "root", car avec les autres login je n’ai pas la permission.
 
D'où ma question : comment pourrais-je résoudre ce pb de permission, pour pouvoir effectuer la commande "du -lsh" dans mon fichier .pl ?
 
Merci par avance.


Message édité par ml01 le 06-05-2004 à 09:36:38

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Determiner quota disk user && taille totale du répertoire de user

 

Sujets relatifs
compter le nombre de fichiers dans un repertoire ...boite de dialogue et repertoire
choix d'un repertoire pour creation de fichier"lister" un repertoire
pb: taille d'un entete de groupe ne se réduit pas avec imageconnaitre la taille du plus gros BLOB dans une table?
nb de user avec .htaccessProblème de taille... de requête!!!!(Excel)
Taille textarea box ?taille de balise select ?
Plus de sujets relatifs à : Determiner quota disk user && taille totale du répertoire de user


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR