du.pl (disk usage )
simulare il programma linux du per verificare lo spazio utilizzato
Questo programma simula il programma linux du ( disk usage ).
per verificare lo spazio utilizzato da ciascun file di una directory
Per le sottodirectory viene riportato lo spazio complessivo conteggiando
tutti i file della sottodirectory ed il numero dei files contenuti in essa.
Esempio di utilizzo del programma:
[enzo@enzo6 varie]$ ./du.pl /usr_data/
pathname: /usr_data/
D: /usr_data//arabo = 603.923.476 bytes ( 9 files )
D: /usr_data//VirtualBOX = 38111.339.529 bytes ( 28 files )
D: /usr_data//DOCUMENTAZIONE = 3775.787.453 bytes ( 73178 files )
D: /usr_data//DOWNLOAD = 6490.246.311 bytes ( 21636 files )
D: /usr_data//REPO-SVN = 45.010 bytes ( 45 files )
D: /usr_data//BUILD = 2241.665.259 bytes ( 52037 files )
D: /usr_data//ACX100 = 33.719.116 bytes ( 560 files )
D: /usr_data//varie = 418.051.497 bytes ( 23715 files )
F: /usr_data/fwbuilder.log.txt = 21.474 bytes
F: /usr_data/nodes.dat = 5.004 bytes
D: /usr_data/bck.kjots = 1.377.021 bytes ( 6 files )
F: /usr_data/myweb.2007.02.16.tar.gz = 2.492.457 bytes
F: /usr_data/setup.firewall = 19.634 bytes
Ovviamente il comando du ha poco senso in ambito linux in quanto esiste gia' la versione originale del programma.
Windows non offre un tool analogo e con questo sistema operativo il progamma acquista anche un senso pratico.
C:\Documents and Settings\enzo.xxxx>C:\Programmi\du.pl
pathname: .
D: ./Cookies = 33.014 bytes ( 2 files )
D: ./Dati applicazioni = 5.716.375 bytes ( 108 files )
D: ./Desktop = 1.791 bytes ( 4 files )
D: ./Documenti = 1.471.087 bytes ( 44 files )
D: ./Impostazioni locali = 554.005.473 bytes ( 424 files )
D: ./Menu Avvio = 20.454 bytes ( 23 files )
D: ./Modelli = 37.456 bytes ( 11 files )
F: ./NTUSER.DAT = 2.621.440 bytes
F: ./ntuser.dat.LOG = 1.024 bytes
F: ./ntuser.ini = 194 bytes
F: ./ntuser.pol = 1.286 bytes
D: ./Preferiti = 122 bytes ( 0 files )
D: ./Recent = 40.020 bytes ( 58 files )
F: ./regwizard.log = 1.259 bytes
D: ./Risorse di rete = 971 bytes ( 3 files )
D: ./Risorse di stampa = 0 bytes ( -1 files )
F: ./sanct.log = 6.206 bytes
D: ./SendTo = 179 bytes ( 5 files )
D: ./UserData = 32.888 bytes ( 2 files )
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 use File::stat;
48
49 my ( $pathname ) = $ARGV[0];
50
51 if ( ! $pathname ) { $pathname = '.'; }
52
53 print "pathname: $pathname \n";
54 my @files = list_files( $pathname, 0 );
55
56 foreach $f ( @files )
57 {
58
59
60
61 if( -l $f )
62 {
63
64 }
65 elsif( -d $f )
66 {
67 my @lsttmp = list_files( $f, 1 );
68 my $isize = 0;
69
70
71
72 for $ftmp ( @lsttmp )
73 {
74 $isize += file_size($ftmp);
75 }
76 printf( "D: %-50s = %-13s bytes ( %d files )\n", $f, fmt_size($isize), $#lsttmp );
77 }
78 elsif( -f $f )
79 {
80 my $isize = file_size($f);
81 printf( "F: %-50s = %-13s bytes \n", $f, fmt_size($isize) );
82 }
83
84 }
85
86
87
88
89
90
91
92 sub fmt_size
93 {
94 my( $isize ) = @_;
95 my( $m, $k, $u, $imod, $res, $strres );
96
97 $m = int( $isize / 1000000 );
98 $imod = $isize % 1000000;
99 $k = int( $imod / 1000 );
100 $u = int( $imod % 1000 );
101
102 if( $m > 0 ) { $res = sprintf( "%3d.%03d.%03d", $m, $k, $u ); }
103 elsif( $k > 0 ) { $res = sprintf( "%3d.%03d", $k, $u ); }
104 elsif( $u > 0 ) { $res = sprintf( "%3d", $u ); }
105 else { $res = "0"; }
106
107
108 $strres = sprintf( "%15s", $res );
109 return $strres;
110
111 }
112
113
114
115 sub file_size
116 {
117 my( $fname ) = @_;
118 my ( $fsize, $sb );
119
120
121
122 if( -d $fname )
123 {
124 $fsize = 0;
125 }
126 else
127 {
128 $sb = stat($fname);
129 if( ! defined $sb )
130 {
131 print "[file_size] stat($fname) in UNDEF \n\n";
132 $fsize = 0;
133 }
134 else
135 {
136 $fsize = $sb->size;
137 }
138 }
139
140
141
142 return $fsize;
143 }
144
145
146
147
148
149 sub list_files
150 {
151 my( $pathname, $mode ) = @_;
152 my( @atmp, @lstfiles, $f );
153
154
155
156 if( -l $pathname )
157 {
158
159 return @lstfiles;
160 }
161
162 opendir( D, $pathname ) or warn "Can t open dir $pathname -> $! ";
163 @atmp = readdir(D);
164
165 @lstfiles = ();
166 foreach $f ( @atmp )
167 {
168 if ( $f eq '.' ) { next; }
169 if ( $f eq '..' ) { next; }
170 if ( $f eq '/' ) { next; }
171
172 if( $pathname eq '.' )
173 {
174 $f = './' . $f;
175 }
176 else
177 {
178 $f = $pathname . '/' . $f;
179 }
180
181 if( $mode == 0 )
182 {
183 push @lstfiles, $f;
184 }
185 else
186 {
187 if ( -d $f )
188 {
189 my @lfiles = list_files( $f, 1 );
190 push @lstfiles, @lfiles;
191 my $n1 = scalar @lfiles;
192 my $n2 = scalar @lstfiles;
193 }
194 else
195 {
196 push @lstfiles, $f;
197 }
198 }
199 }
200
201 closedir D;
202 return @lstfiles;
203 }