• Publicidad

Mostrar contenido de directorio en web

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Re: Mostrar contenido de directorio en web

Notapor fherdw » 2014-07-23 23:27 @019

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!!!
fherdw
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2013-12-01 20:26 @893

Publicidad

Re: Mostrar contenido de directorio en web

Notapor explorer » 2014-07-24 05:46 @282

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).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Mostrar contenido de directorio en web

Notapor fherdw » 2014-07-24 06:55 @330

¡¡¡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:
  1. 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.
  2. 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.
  3. 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!!!!
fherdw
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2013-12-01 20:26 @893

Re: Mostrar contenido de directorio en web

Notapor explorer » 2014-07-24 12:23 @557

Esta es una primera aproximación a lo que buscas:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. #
  3. # Buscar los archivos mayores a una cierta cantidad indicada como argumento
  4. #
  5. # Joaquín Ferrero. 29 de julio de 2014
  6. #
  7. # Argumentos:
  8. #       tamaño (número positivo)
  9. #       unidad  (b,kb,mb,gb,tb,pb)
  10. #       directorio
  11. #
  12. # El resultado queda grabado en el archivo html.txt
  13. #
  14. use v5.14;
  15.  
  16. ## Comprobar los argumentos
  17. if (@ARGV != 3) {                               # ¿Son tres?
  18.     die "Uso: $0 tamaño unidad directorio\n";
  19. }
  20.  
  21. my ($tam, $uni, $dir) = @ARGV;
  22.  
  23. $tam += 0;                                      # pasar a número
  24. $uni  = lc $uni;                                # a minúsculas
  25.  
  26. my $errores = 0;
  27.  
  28. if ($tam <= 0) {                                # error en el tamaño
  29.     warn "ERROR: el tamño no es un número positivo\n";
  30.     $errores++;
  31. }
  32.  
  33. if ($uni !~ m/^[kmgtp]?b$/) {                   # error en la unidad
  34.     warn "ERROR: la unidad debe ser una de estas: b, kb, mb, gb, pb\n";
  35.     $errores++
  36. }
  37.  
  38. if (not -d $dir) {                              # error en el directorio
  39.     warn "ERROR: no existe el directorio [$dir]\n";
  40.     $errores++;
  41. }
  42.  
  43. ## Salir si hay errores
  44. die if $errores;
  45.  
  46.  
  47. ## ajuste del tamaño según la unidad
  48. $uni = substr $uni, 0, 1;                       # nos quedamos con la primera letra
  49. $uni = 10 ** (3 * index "bkmgtp", $uni);        # 10^(3*<letra de unidad>)
  50.  
  51. $tam *= $uni;                                   # pasamos el tamaño a bytes
  52.  
  53. ## buscamos los archivos que cumplen con la regla
  54. open my $SALIDA, '>', 'html.txt' or die "ERROR: $!\n";
  55. for my $archivo (<$dir/*>) {
  56.  
  57.     next if not -f $archivo;                    # saltar al siguiente si no es un archivo normal
  58.     next if     -s $archivo < $tam;             # saltar al siguiente si es menor que lo que buscamos
  59.  
  60.     print $SALIDA "$archivo\n";                 # salida a archivo
  61. }
  62. close $SALIDA;
Coloreado en 0.005 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: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Mostrar contenido de directorio en web

Notapor fherdw » 2014-07-25 15:13 @676

Gracias por su ayuda, ¡¡¡ahora voy a ver cómo lo hago!!!

¡¡¡Saludos!!!
fherdw
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2013-12-01 20:26 @893

Comando "find"

Notapor fherdw » 2014-07-29 09:17 @428

¡¡¡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!!!
fherdw
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2013-12-01 20:26 @893

Re: Mostrar contenido de directorio en web

Notapor explorer » 2014-07-29 11:02 @501

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().
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Mostrar contenido de directorio en web

Notapor fherdw » 2014-07-29 11:21 @514

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!!!
fherdw
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2013-12-01 20:26 @893

Re: Mostrar contenido de directorio en web

Notapor explorer » 2014-07-29 11:30 @521

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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Mostrar contenido de directorio en web

Notapor fherdw » 2014-07-29 12:08 @547

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!
fherdw
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2013-12-01 20:26 @893

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

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

cron