IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

Adaptation code monitoring de dossier


Sujet :

Programmation et administration système Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Débutant !!
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Débutant !!
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Par défaut Adaptation code monitoring de dossier
    Bonjour à tous,

    je chercher à adapter le (TRES BON) code suivant, afin de permettre le monitoring d'une liste de différents dossier, pas uniquement un seul, plutôt que de lancer x fois le code dans x consoles.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
     
    #!/usr/bin/perl
     
     
     
    # Monitors a directory for file changes.
    #
    # Usage: directory_monitor.pl <directory>
    #
    # -- http://www.nooblet.org/blog
     
    # -------------------------------------------------------------------------------------------------------------
    ## Default directory to be monitored.
    my $directory = "T:/test";
     
    ## How long to sleep between checks, in seconds
    my $sleeptime = .1;
    # -------------------------------------------------------------------------------------------------------------
     
    use POSIX qw(ceil floor);
     
    $| = 1;
    # Directory on command-line
    if ($#ARGV >= 0) { $directory = join(' ', @ARGV); }
     
    # Directories need to have a trailing slash
    if (substr($directory,-1) ne "/") { $directory .= "/"; }
     
    # Check if the directory exists
    if (!-e $directory) {
    	print STDERR "'$directory' n'existe pas.\n";
    	exit(-1);
    }
     
    # Store file info here
    my %data;
    # individual file statistics placed in this global array
    my @gstat;
     
    # begin
    print "\nSuivi dossier: ".$directory."\n";
    print "\t(ctrl+c pour stopper)\n";
     
    # loop forever
    while (true) {
    	my $first = 0;
    	# Get directory handle
    	opendir(DIR, $directory) or die "Unable to open directory, $directory : $!";
    	# And loop through the contents
    	while (defined(my $filename = readdir(DIR))) {
    		# We only want files, not sub-directories
    		if (-d $directory.$filename) { next; }
    		# Get inode statistics
    		@gstat = &getstat($filename);
    		# If this is the first time it is being run, don't want to spam that every file is new, just add it to the hash
    		if (!scalar(%data)) { $first = 1; &update($filename); }
    		# subsequent files are added on first run
    		elsif ($first == 1) { &update($filename); }
    		# Not first run, and new file found
    		elsif (!scalar($data{$filename})) { &doPrint($filename, "Created. [".&printBytes($gstat[7])."]"); &update($filename); }
    		# The size has changed
    		elsif ($data{$filename}{'size'} != $gstat[7]) {
    			my $increase = $gstat[7] - $data{$filename}{'size'};
    			my $text = "Size changed to ".&printBytes($gstat[7]);
    			if ($increase > 0) { $text .= " (up ".&printBytes($increase).")"; }
    			elsif ($increase < 0) { $text .= " (down ".&printBytes($increase * -1).")"; }
    			&doPrint($filename, $text);
    			&update($filename);
    		}
    		# The modified time has changed
    		elsif ($data{$filename}{'mtime'} != $gstat[9]) {
    				&doPrint($filename, "Modified, size unchanged");
    			&update($filename);
    		}
    	}
    	# Clean up the directory handle
    	closedir(DIR);
    	# Check for files in the hash which are no longer in the directory
    	foreach $key (keys %data) {
    		if (! -e $directory.$key) {
    			&doPrint($key, "Deleted. Last modified at ".readTime($data{$key}{'mtime'})." (".&duration(time() - $data{$key}{'mtime'}).") [".&printBytes($data{$key}{'size'})."]");
    			delete($data{$key});
    		}
    	}
    	# Sleep for a bit, else it eats up the CPU
    	sleep($sleeptime);
    }
     
    # returns the time in the format <year><month><day>.<hour><minute><second> .. hardly readable but concise
    sub readTime {
    	my ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime(shift(@_));
    	my $time = (1900+ $yearOffset).sprintf("%02d", $month).sprintf("%02d", $dayOfMonth).".".sprintf("%02d", $hour).sprintf("%02d", $minute).sprintf("%02d", $second);
    	return $time;
    }
     
    # Print out a file change in a consistent format
    sub doPrint {
    	my $fn = shift(@_);
    	my $t = shift(@_);
    	my $time = readTime(time());
    	print $time." : ".$fn."\t".$t."\n";
    }
     
    # Takes bytes are returns kilobytes, megabytes, gigabyte values instead based on set limits
    sub printBytes {
    	my $bytes = shift(@_);
    	if ($bytes <= 4096) { return $bytes."b"; }
    	$bytes = sprintf("%.2f",$bytes / 1024);
    	if ($bytes <= 1024) { return $bytes."k"; }
    	$bytes = sprintf("%.2f",$bytes / 1024);
    	if ($bytes <= 1024) { return $bytes."m"; }
    	$bytes = sprintf("%.2f",$bytes / 1024);
    	return $bytes."g";
    }
     
    # Take number of seconds and return duration, ie. 2d 4h 5m 14s
    sub duration {
    	my $time = shift(@_);
    	if ($time == 0) { return "just now"; }
    	my $string = "";
    	my $days = floor($time / 86400); $time = $time - ($days * 86400);
    	if ($days > 0) { $string .= $days."d "; }
    	my $hours = floor($time / 3600); $time = $time - ($hours * 3600);
    	if ($hours > 0) { $string .= $hours."h "; }
    	my $mins = floor($time / 60); $time = $time - ($mins * 60);
    	if ($mins > 0) { $string .= $mins."m "; }
    	my $secs = $time;
    	if ($secs > 0) { $string .= $secs."s "; }
    	$string .= "ago";
    	return $string;
    }
     
    # Populate array with inode statistics
    sub getstat {
    	my $fn = $_[0];
    	open(FILE, $directory.$fn);
    	my @stat = stat(FILE);
    	close(FILE);
    	return @stat;
    }
     
    # update the has with file info
    sub update {
    	my $fn = $_[0];
    	$data{$fn} = {
    		size => $gstat[7],
    		mtime => $gstat[9],
    	};
    }

    J'aurais voulu remplacer le $directory par un @directory=("T:/test1","T:/test2")
    et faire une espèce de boucle style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     for (my $i=0; $i<=$#directory;$i++)
     { 
     
    }
    et remplacer dans la suite les $directory par $directory[$i]

    Mais je ne sais pas où la caler...

    Désolé, je reste un grand débutant

    D'avance merci pour vos conseils !

    Cordialement,

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Citation Envoyé par kenobiwan88 Voir le message

    je chercher à adapter le (TRES BON) code suivant, afin de permettre le monitoring d'une liste de différents dossier, pas uniquement un seul, plutôt que de lancer x fois le code dans x consoles.
    Hum, très bon, pas vraiment. Non que le code soit mauvais en tant que tel, il fait sans doute ce dont tu as besoin, mais il est écrit comme on écrivait le Perl il y a 15 ou 20 ans, pas du tout en conformité avec les bonnes pratiques actuelles. Franchement, si je devais reprendre ce code, je commencerais par lui faire subir un gros toilettage.

    Sinon, pour moi, le plus simple serait de mettre la boucle while dans une fonction à appeler pour chaque répertoire de la liste.

  3. #3
    Membre averti
    Homme Profil pro
    Débutant !!
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Débutant !!
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Par défaut
    Citation Envoyé par Lolo78 Voir le message

    Hum, très bon, pas vraiment. Non que le code soit mauvais en tant que tel, il fait sans doute ce dont tu as besoin ...
    Bonnjour,

    effectivement, je parlais plutôt de la fonctionnalité et du rendu que de la façon dont il est codé, tout simplement car je n'ai pas la compétence pour en juger.
    Je vais donc regarder du côté de votre conseil...

  4. #4
    Membre averti
    Homme Profil pro
    Débutant !!
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Débutant !!
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Par défaut
    Bonjour,

    je nage complètement, quelqu'un aurait une piste ?
    il faut bien créer un sub avec comme argument le dossier, mais pour l'adaptation de la boucle while je galère un peu...

  5. #5
    Membre averti
    Homme Profil pro
    Débutant !!
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Débutant !!
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Par défaut
    Citation Envoyé par kenobiwan88 Voir le message
    Bonjour,

    je nage complètement, quelqu'un aurait une piste ?
    il faut bien créer un sub avec comme argument le dossier, mais pour l'adaptation de la boucle while je galère un peu...
    Mes excuses, mon code actuel avec :

    Et la fonction "watchit"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
     
     
    # -------------------------------------------------------------------------------------------------------------
    ## Default directory to be monitored.
    my @directory = ("C:/","C:/windows","C:/windows/temp/");
     
     
    ## How long to sleep between checks, in seconds
    my $sleeptime = 1;
    # -------------------------------------------------------------------------------------------------------------
     
    use POSIX qw(ceil floor);
     
    $| = 1;
     
    # Check if the directory exists
    #if (!-e $directory) {
    #	print STDERR "'$directory' n'existe pas.\n";
    #	exit(-1);
    #}
     
    # Store file info here
    my %data;
    # individual file statistics placed in this global array
    my @gstat;
     
    # begin
    #print "\n Fichier suivi: ".$directory."\n";
    #print "\t(ctrl+c pour stopper)\n\n";
     
     
     
    	 for (my $i=0; $i<=$#directory;$i++)
     {
      print("$directory[$i]\n");
     watchit($directory[$i]);
     }
     
     
     
     
     #fonction qui appelles les directory
    sub watchit
    {
    my ($directory)=@_;
     
    print("$directory\n");
     
    while (true) {
     
    	my $first = 0;
    	# Get directory handle
    	opendir(DIR, $directory) or die "Impossible d'ouvrir le répertoire, $directory : $!";
    	# And loop through the contents
    	while (defined(my $filename = readdir(DIR))) {
    		# We only want files, not sub-directories
    		if (-d $directory.$filename) { next; }
    		# Get inode statistics
    		@gstat = &getstat($filename);
    		# If this is the first time it is being run, don't want to spam that every file is new, just add it to the hash
    		if (!scalar(%data)) { $first = 1; &update($filename); }
    		# subsequent files are added on first run
    		elsif ($first == 1) { &update($filename); }
    		# Not first run, and new file found
    		elsif (!scalar($data{$filename})) { &doPrint($filename, "Creation. [".&printBytes($gstat[7])."]"); &update($filename); }
    		# The size has changed
    		elsif ($data{$filename}{'size'} != $gstat[7]) {
    			my $increase = $gstat[7] - $data{$filename}{'size'};
    			my $text = "Size changed to ".&printBytes($gstat[7]);
    			if ($increase > 0) { $text .= " (up ".&printBytes($increase).")"; }
    			elsif ($increase < 0) { $text .= " (down ".&printBytes($increase * -1).")"; }
    			&doPrint($filename, $text);
    			&update($filename);
    		}
    		# The modified time has changed
    		elsif ($data{$filename}{'mtime'} != $gstat[9]) {
    				&doPrint($filename, "Modification, taille inchangee");
    			&update($filename);
    		}
    	}
    	# Clean up the directory handle
    	closedir(DIR);
    	# Check for files in the hash which are no longer in the directory
    	foreach $key (keys %data) {
    		if (! -e $directory.$key) {
    			&doPrint($key, "Suppression, modification pour la dernière fois le ".readTime($data{$key}{'mtime'})." (".&duration(time() - $data{$key}{'mtime'}).") [".&printBytes($data{$key}{'size'})."]");
    			delete($data{$key});
    		}
    	}
    	# Sleep for a bit, else it eats up the CPU
    	sleep($sleeptime);
    }
     
    }
     
     
     
     
     
     
    # returns the time in the format <year><month><day>.<hour><minute><second> .. hardly readable but concise
    sub readTime {
    	my ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime(shift(@_));
    	my $time = (1900+ $yearOffset).sprintf("%02d", $month).sprintf("%02d", $dayOfMonth).".".sprintf("%02d", $hour).sprintf("%02d", $minute).sprintf("%02d", $second);
    	return $time;
    }
     
    # Print out a file change in a consistent format
    sub doPrint {
    	my $fn = shift(@_);
    	my $t = shift(@_);
    	my $time = readTime(time());
    	print $time." : ".$fn."\t".$t."\n";
    }
     
    # Takes bytes are returns kilobytes, megabytes, gigabyte values instead based on set limits
    sub printBytes {
    	my $bytes = shift(@_);
    	if ($bytes <= 4096) { return $bytes."b"; }
    	$bytes = sprintf("%.2f",$bytes / 1024);
    	if ($bytes <= 1024) { return $bytes."k"; }
    	$bytes = sprintf("%.2f",$bytes / 1024);
    	if ($bytes <= 1024) { return $bytes."m"; }
    	$bytes = sprintf("%.2f",$bytes / 1024);
    	return $bytes."g";
    }
     
    # Take number of seconds and return duration, ie. 2d 4h 5m 14s
    sub duration {
    	my $time = shift(@_);
    	if ($time == 0) { return "just now"; }
    	my $string = "";
    	my $days = floor($time / 86400); $time = $time - ($days * 86400);
    	if ($days > 0) { $string .= $days."d "; }
    	my $hours = floor($time / 3600); $time = $time - ($hours * 3600);
    	if ($hours > 0) { $string .= $hours."h "; }
    	my $mins = floor($time / 60); $time = $time - ($mins * 60);
    	if ($mins > 0) { $string .= $mins."m "; }
    	my $secs = $time;
    	if ($secs > 0) { $string .= $secs."s "; }
    	$string .= "ago";
    	return $string;
    }
     
    # Populate array with inode statistics
    sub getstat {
    	my $fn = $_[0];
    	open(FILE, $directory.$fn);
    	my @stat = stat(FILE);
    	close(FILE);
    	return @stat;
    }
     
    # update the has with file info
    sub update {
    	my $fn = $_[0];
    	$data{$fn} = {
    		size => $gstat[7],
    		mtime => $gstat[9],
    	};
    }
    EDIT : cette version se perd dans la première boucle while et il n'en sort jamais,

    si je change et que je met la boucle while non pas dans la fonction mais autour de la boucle for, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    while (true) {
     
    	 for (my $i=0; $i<=$#directory;$i++)
     {
      print("$directory[$i]\n");
     watchit($directory[$i]);
     }
    }
    et ben il recommence toujours à 0

  6. #6
    Membre averti
    Homme Profil pro
    Débutant !!
    Inscrit en
    Novembre 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Débutant !!
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2015
    Messages : 29
    Par défaut
    Je me réponds tout seul, ca avance un peu ::

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
     
    # -------------------------------------------------------------------------------------------------------------
    ## Default directory to be monitored.
    my @directory = ("C:/","C:/windows/");
     
     
    ## How long to sleep between checks, in seconds
    my $sleeptime = 1;
    # -------------------------------------------------------------------------------------------------------------
     
    use POSIX qw(ceil floor);
     
    $| = 1;
     
     
    while (true) {
     
    	 for (my $i=0; $i<=$#directory;$i++)
     {
      print("$directory[$i]\n");
     watchit($directory[$i]);
     }
    } 
     
     #fonction qui appelles les directory
    sub watchit
    {
    my ($directory)=@_;
     
     
    # Store file info here
    my %data;
    # individual file statistics placed in this global array
    my @gstat;
     
     
    	my $first = 0;
    	# Get directory handle
    	opendir(DIR, $directory) or die "Impossible d'ouvrir le répertoire, $directory : $!";
    	# And loop through the contents
    	while (defined(my $filename = readdir(DIR))) {
    		# We only want files, not sub-directories
    		if (-d $directory.$filename) { next; }
    		# Get inode statistics
    		@gstat = &getstat($filename);
    		# If this is the first time it is being run, don't want to spam that every file is new, just add it to the hash
    		if (!scalar(%data)) { $first = 1; &update($filename); }
    		# subsequent files are added on first run
    		elsif ($first == 1) { &update($filename); }
    		# Not first run, and new file found
    		elsif (!scalar($data{$filename})) { &doPrint($filename, "Creation. [".&printBytes($gstat[7])."]"); &update($filename); }
    		# The size has changed
    		elsif ($data{$filename}{'size'} != $gstat[7]) {
    			my $increase = $gstat[7] - $data{$filename}{'size'};
    			my $text = "Size changed to ".&printBytes($gstat[7]);
    			if ($increase > 0) { $text .= " (up ".&printBytes($increase).")"; }
    			elsif ($increase < 0) { $text .= " (down ".&printBytes($increase * -1).")"; }
    			&doPrint($filename, $text);
    			&update($filename);
    		}
    		# The modified time has changed
    		elsif ($data{$filename}{'mtime'} != $gstat[9]) {
    				&doPrint($filename, "Modification, taille inchangee");
    			&update($filename);
    		}
    	}
    	# Clean up the directory handle
    	closedir(DIR);
    	# Check for files in the hash which are no longer in the directory
    	foreach $key (keys %data) {
    		if (! -e $directory.$key) {
    			&doPrint($key, "Suppression, modification pour la dernière fois le ".readTime($data{$key}{'mtime'})." (".&duration(time() - $data{$key}{'mtime'}).") [".&printBytes($data{$key}{'size'})."]");
    			delete($data{$key});
    		}
    	}
    	# Sleep for a bit, else it eats up the CPU
    	sleep($sleeptime);
     
    	print("termine\n");
     
    }
     
     
    # returns the time in the format <year><month><day>.<hour><minute><second> .. hardly readable but concise
    sub readTime {
    	my ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime(shift(@_));
    	my $time = (1900+ $yearOffset).sprintf("%02d", $month).sprintf("%02d", $dayOfMonth).".".sprintf("%02d", $hour).sprintf("%02d", $minute).sprintf("%02d", $second);
    	return $time;
    }
     
    # Print out a file change in a consistent format
    sub doPrint {
    	my $fn = shift(@_);
    	my $t = shift(@_);
    	my $time = readTime(time());
    	print $time." : ".$fn."\t".$t."\n";
    }
     
    # Takes bytes are returns kilobytes, megabytes, gigabyte values instead based on set limits
    sub printBytes {
    	my $bytes = shift(@_);
    	if ($bytes <= 4096) { return $bytes."b"; }
    	$bytes = sprintf("%.2f",$bytes / 1024);
    	if ($bytes <= 1024) { return $bytes."k"; }
    	$bytes = sprintf("%.2f",$bytes / 1024);
    	if ($bytes <= 1024) { return $bytes."m"; }
    	$bytes = sprintf("%.2f",$bytes / 1024);
    	return $bytes."g";
    }
     
    # Take number of seconds and return duration, ie. 2d 4h 5m 14s
    sub duration {
    	my $time = shift(@_);
    	if ($time == 0) { return "just now"; }
    	my $string = "";
    	my $days = floor($time / 86400); $time = $time - ($days * 86400);
    	if ($days > 0) { $string .= $days."d "; }
    	my $hours = floor($time / 3600); $time = $time - ($hours * 3600);
    	if ($hours > 0) { $string .= $hours."h "; }
    	my $mins = floor($time / 60); $time = $time - ($mins * 60);
    	if ($mins > 0) { $string .= $mins."m "; }
    	my $secs = $time;
    	if ($secs > 0) { $string .= $secs."s "; }
    	$string .= "ago";
    	return $string;
    }
     
    # Populate array with inode statistics
    sub getstat {
    	my $fn = $_[0];
    	open(FILE, $directory.$fn);
    	my @stat = stat(FILE);
    	close(FILE);
    	return @stat;
    }
     
    # update the has with file info
    sub update {
    	my $fn = $_[0];
    	$data{$fn} = {
    		size => $gstat[7],
    		mtime => $gstat[9],
    	};
    }

    J'ai compris comment ca roulait, il reste juste ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    # Store file info here
    my %data;
    # individual file statistics placed in this global array
    my @gstat;
    si je les mets dans la fonction watchit, ils se réinitialisent à chaque fois et donc la boucle ne s'en souvient pas, il n'affiche jamais rien, parce que pour le deuxieme dossier, il écrase par rapport au premier
    si je les mets dans le while(true), il se rappelle pas et m'affiche tout comme nouvellement créé à chaque itération..

    il me faudrait peut être autant de "%data" et de "@gstat" que de dossier... mais la je ne vois pas comment procéder !

Discussions similaires

  1. monitoring de dossier
    Par dahtah dans le forum Général Java
    Réponses: 2
    Dernier message: 30/11/2009, 11h09
  2. Parser JSON avec $.getJSON jquery adaptation code
    Par MatthieuFourcade dans le forum jQuery
    Réponses: 2
    Dernier message: 22/06/2009, 10h17
  3. Adapter Code Delphi 7 à Delphi 2009
    Par mmsalem dans le forum API, COM et SDKs
    Réponses: 12
    Dernier message: 18/03/2009, 17h42
  4. adaptation code treeview
    Par clemasson dans le forum VBA Access
    Réponses: 1
    Dernier message: 29/05/2008, 16h44
  5. adaptation code load_page ajax et js
    Par clara1 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/05/2008, 20h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo