Página 2 de 3
Re: Mostrar contenido de directorio en web
Publicado:
2014-07-23 23:27 @019
por fherdw
Hola devuelta, paso un tiempo, y no lo había hecho. ¡¡¡Pero hoy me puse en campaña!!!
He podido hacer esto: archivo adjunto.
Pero me faltan volcar estos tres parámetros a un archivo html.
Puedo sobreescribir index.html de Apache.
Igual mi script tiene un error por que la sintaxis del comando find() me falla al volcarlo a html.txt.
¡¡¡Agradezco sus ayudas!!!
Re: Mostrar contenido de directorio en web
Publicado:
2014-07-24 05:46 @282
por explorer
No veo el adjunto...
Si tienes algo de código, por favor, copia y pégalo en un mensaje, y veremos qué tienes.
Por otra parte, creo que en algún hilo ya hemos dado soluciones parciales a este problema (al menos, hay unos cuántos que hablan de cómo leer el contenido de un directorio).
Re: Mostrar contenido de directorio en web
Publicado:
2014-07-24 06:55 @330
por fherdw
¡¡¡Gracias!!!
Hasta ahora tengo esto:
#!/usr/bin/perl
use strict;
use warnings;
my ($tam, $uni, $dir) = @ARGV;
print "tamaño \n";
$tam=<STDIN>;
if (not defined $tam) {die "¡¡¡necesito un tamaño!!! \n";}
if (not defined $uni) {die "¡¡¡necesito un unidad!!! \n";}
if (not defined $dir) {die "¡¡¡necesito un directorio!!! \n";}
system "find /$ARGV[2] -size +$ARGV[0] >> html.txt;
Notas:
- En la última línea debería cambiar html.txt a una base HTML. Puedo sobreescribir index.html. Es para que me muestre la lista en el navegador.
- También está mal la sintaxis de find, pasa que lo voy entendiendo de apoco, y eso es lo que tendría que hacer: que me busque en ARGV[2], los archivos mayores a ARGV[0] y me los vuelque en una html.
- También me faltaría concatenar ARGV[0] con ARGV[1], pero no logro que me tome en cuenta las unidades de ARGV1 (kb,MB,gb,tb,etc.).
Gracias, ese es mi
script. Espero que lo pueda entender, porque ¡no puedo subir la imagen!
Igual desde ya muchas gracias... ¡¡¡¡Un abrazo!!!!
Re: Mostrar contenido de directorio en web
Publicado:
2014-07-24 12:23 @557
por explorer
Esta es una primera aproximación a lo que buscas:
Using perl Syntax Highlighting
#!/usr/bin/perl
#
# Buscar los archivos mayores a una cierta cantidad indicada como argumento
#
# Joaquín Ferrero. 29 de julio de 2014
#
# Argumentos:
# tamaño (número positivo)
# unidad (b,kb,mb,gb,tb,pb)
# directorio
#
# El resultado queda grabado en el archivo html.txt
#
use v5.14;
## Comprobar los argumentos
if (@ARGV != 3) { # ¿Son tres?
die "Uso: $0 tamaño unidad directorio\n";
}
my ($tam, $uni, $dir) = @ARGV;
$tam += 0; # pasar a número
$uni = lc $uni; # a minúsculas
my $errores = 0;
if ($tam <= 0) { # error en el tamaño
warn "ERROR: el tamño no es un número positivo\n";
$errores++;
}
if ($uni !~ m/^[kmgtp]?b$/) { # error en la unidad
warn "ERROR: la unidad debe ser una de estas: b, kb, mb, gb, pb\n";
$errores++
}
if (not -d $dir) { # error en el directorio
warn "ERROR: no existe el directorio [$dir]\n";
$errores++;
}
## Salir si hay errores
die if $errores;
## ajuste del tamaño según la unidad
$uni = substr $uni, 0, 1; # nos quedamos con la primera letra
$uni = 10 ** (3 * index "bkmgtp", $uni); # 10^(3*<letra de unidad>)
$tam *= $uni; # pasamos el tamaño a bytes
## buscamos los archivos que cumplen con la regla
open my $SALIDA, '>', 'html.txt' or die "ERROR: $!\n";
for my $archivo (<$dir/*>) {
next if not -f $archivo; # saltar al siguiente si no es un archivo normal
next if -s $archivo < $tam; # saltar al siguiente si es menor que lo que buscamos
print $SALIDA "$archivo\n"; # salida a archivo
}
close $SALIDA;
Coloreado en 0.004 segundos, usando
GeSHi 1.0.8.4
Re: Mostrar contenido de directorio en web
Publicado:
2014-07-25 15:13 @676
por fherdw
Gracias por su ayuda, ¡¡¡ahora voy a ver cómo lo hago!!!
¡¡¡Saludos!!!
Comando "find"
Publicado:
2014-07-29 09:17 @428
por fherdw
¡¡¡Hola a todos!!!
Bueno, yo tenía que hacer un script en Perl, que ya casi tengo, pero que se me ha complicado con el comando find.
Ya que debo realizar una búsqueda de archivos mayores a un tamaño determinado (ingresado por parámetro), y me los tiene que listar en un archivo de texto.
La sintaxis de mi script es algo así:
system "(find $dir -size +$tamano -exec ls -l {}\)>html.txt";
Donde:
$dir es un directorio ingresado por parámetro (STDIN), y me lo toma perfectamente
$tamano es un valor en bytes, también ingresado por parámetro (STDIN). Pero que me lo desconoce
La pregunta aquí es:
¿Cómo logro que el comando "find" me tome la variable $tamano en la sintaxis?
¡¡Gracias!!
¡¡¡Saludos!!!
Re: Mostrar contenido de directorio en web
Publicado:
2014-07-29 11:02 @501
por explorer
Si el $tamano está en bytes, según la
documentación del comando find, hay que agregarle el sufijo 'c', con lo que quedaría así (no probado):
system("find $dir -size +${tamano}c -exec ls -l {} \; > html.txt");Observa que también tenías mal puestas las comillas.
Si quieres hacer esto mismo en mi código anterior, te vale con hacer un open() al archivo donde quieres escribir, y luego añadir el gestor de archivo al print() o al say().
Re: Mostrar contenido de directorio en web
Publicado:
2014-07-29 11:21 @514
por fherdw
Gracias, me sirvió bastante, aunque al ejecutar mi script sigue apareciendo el siguiente error:
sh: -size: not found
Lo que me lista todo el contenido del directorio ($dir).
Pero gracias igual, ¡ya voy a ver cómo lo puedo arreglar!
¡¡¡Saludos!!!
Re: Mostrar contenido de directorio en web
Publicado:
2014-07-29 11:30 @521
por explorer
Hum... yo diría que el mensaje de error sale porque $dir no contiene nada... y por eso salen los archivos del directorio actual.
Pero eso no puede ser porque dices que salen los archivos del directorio indicado...
Mejor prueba el comando antes en la línea de comandos, antes de meterla en el programa Perl.
Re: Mostrar contenido de directorio en web
Publicado:
2014-07-29 12:08 @547
por fherdw
Gracias,gracias. ¡¡¡Ya pude corregir un par de errores!!!
El comando find me quedó así fuera del script, y funciona:
find /home -size +30000c -exec ls -lhgo \; >html.txt
Pero en el script, así:
system ("find $dir -size +${tamano}c -exec ls -lhgo \; >html.txt");
Y sigue sin tomar $tamano ("sh: 2: -size: not found").
Comprobé que $dir sí lo toma porque al escribir cualquier directorio, en este caso /home, me lista todos los archivos contenidos en él. Solo que como no toma "size" ¡me los muestra a todos!