• Publicidad

Determinar el peso de varios archivos dentro de un dir.

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Determinar el peso de varios archivos dentro de un dir.

Notapor nancypadin » 2008-07-17 13:15 @594

Necesito detectar en un directorio los archivos que superan cierta cantidad de kb. y con ellos armar un informe.

¿Hay alguna función que me devuelva el peso del archivo?

Muchas gracias :)
nancypadin
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2008-07-17 12:56 @581

Publicidad

Notapor explorer » 2008-07-17 13:24 @600

Bienvenido a los foros de Perl en Español, nancypadin.

Tienes que usar el 'filetest' -s:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$peso_del_archivo = -s $archivo;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor kidd » 2008-07-17 15:39 @694

Hola,

Bienvenida a los foros de Perl en Español. explorer ya te dió la manera en que puedes tomar el tamaño en bytes de un archivo.

Ahora, usando el módulo File::Find, puedes hacer lo que quieres de manera rápida. Por ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

use strict;

use File::Find;


# Ruta al directorio raíz del cual se buscarán la cantidad
# que miden los archivos dentro de cada subdirectorio
my $directorio_inicial = 'C:/Perl/lib/';

# Aquí almacenaremos los resultados
my %Directorio;


# Iniciamos la rutina de File::Find
find(\&tamanio_archivo, $directorio_inicial);


# Mostramos los resultados enlistando los directorios por tamaño,
# de mayor a menor
print "Directorios por tamaño: \n\n";

for my $key( sort { $Directorio{$b} <=> $Directorio{$a} } keys %Directorio ){
    print "$Directorio{$key} - $key\n";
}



#Subrutina que será ejecutada por File::Find por cada archivo
sub tamanio_archivo{

    #Recibimos la ruta del archivo
    my $archivo = $_;

    #Checamos si es un archivo y no un directorio
    if( -f $archivo ){
        #Añadimos el tamaño en bytes del archivo
        #a la suma del directorio
        $Directorio{ $File::Find::dir } += -s $archivo;
    }

} #tamanio_archivo
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4



Ejemplo del resultado en mi computadora:

Código: Seleccionar todo
Directorios por tamaño:
5363801 - C:/Perl/lib/pods
4776282 - C:/Perl/lib/unicore
2895900 - C:/Perl/lib
2541538 - C:/Perl/lib/auto/Tcl
2025577 - C:/Perl/lib/CORE
1779659 - C:/Perl/lib/Tk
1512629 - C:/Perl/lib/Tk/pTk
835682 - C:/Perl/lib/auto/Encode/JP
790626 - C:/Perl/lib/auto/Encode/KR
733282 - C:/Perl/lib/auto/Encode/TW
729186 - C:/Perl/lib/auto/Encode/CN
680547 - C:/Perl/lib/Unicode
637418 - C:/Perl/lib/auto/Tk
555022 - C:/Perl/lib/ExtUtils
549226 - C:/Perl/lib/Pod
536445 - C:/Perl/lib/Win32
442849 - C:/Perl/lib/B
398575 - C:/Perl/lib/DBI
368462 - C:/Perl/lib/Math
339003 - C:/Perl/lib/HTML
309386 - C:/Perl/lib/Tk/demos/widget_lib
299557 - C:/Perl/lib/Tk/demos/images
298187 - C:/Perl/lib/auto/DBD/SQLite
276351 - C:/Perl/lib/auto/DBI
255808 - C:/Perl/lib/Net
253845 - C:/Perl/lib/XML/Parser/Encodings
246892 - C:/Perl/lib/unicore/lib/gc_sc
233226 - C:/Perl/lib/ActivePerl/PPM/tcl
217692 - C:/Perl/lib/File
211538 - C:/Perl/lib/Win32API
203119 - C:/Perl/lib/Text
198318 - C:/Perl/lib/Devel
196721 - C:/Perl/lib/auto/Unicode/Normalize
187658 - C:/Perl/lib/ActivePerl/PPM
180343 - C:/Perl/lib/DBD
180013 - C:/Perl/lib/SOAP
164969 - C:/Perl/lib/auto/XML/Parser/Expat
158909 - C:/Perl/lib/auto/Win32API/Registry
150445 - C:/Perl/lib/auto/Tk/JPEG
.... etc
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor nancypadin » 2008-07-18 07:34 @357

¡¡Muchísimas gracias a ambos por sus respuestas y celeridad!!
saludos
nancy
nancypadin
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2008-07-17 12:56 @581


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 16 invitados

cron