Página 2 de 3

Re: Mostrar contenido de directorio en web

NotaPublicado: 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

NotaPublicado: 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

NotaPublicado: 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:
  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!!!!

Re: Mostrar contenido de directorio en web

NotaPublicado: 2014-07-24 12:23 @557
por explorer
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.003 segundos, usando GeSHi 1.0.8.4

Re: Mostrar contenido de directorio en web

NotaPublicado: 2014-07-25 15:13 @676
por fherdw
Gracias por su ayuda, ¡¡¡ahora voy a ver cómo lo hago!!!

¡¡¡Saludos!!!

Comando "find"

NotaPublicado: 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

NotaPublicado: 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

NotaPublicado: 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

NotaPublicado: 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

NotaPublicado: 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!