Linux en Espanol
 
Listar directorio con enlace de descarga (tema #25050)
Publicar nuevo tema  Responder al tema    Foros de discusión -> Programación
Autor Mensaje
matiaswsr
Forista


Registrado: 2007-08-03
Mensajes: 74

Publicado: 2014-10-08 16:50:53    Asunto: Listar directorio con enlace de descarga

Hola, estoy intentando realizar un script que me muestre el contenido de un directorio y a su vez me genere el link para descarga al hacer click.

Lo que llego escrito es lo siguiente, y es lo mas facil que me parecio, pero no me esta funcionando y estimo que es por la variable $i que utilizo dentro del for.

Este script se llamara desde una pagina html y genera otra pagina html con dicho contenido, eso es lo que intento realizar.

Pongo el codigo a continuacion por si me pueden dar alguna sugerencia.

Desde ya muchas gracias por sus comentarios.

[color=green:8761df5399]#!/bin/bash

echo content-type:text/html
echo
echo "<html>"

echo "<head>"
echo "<BR>"
echo "<title><h3>Listado de archivos</h3></title>"
echo"</head>"

echo"<body>"
echo "<BR>"

for i in $(ls); do
echo "<a href="$i">$i</a>"
done[/color:8761df5399]
AnimAlf
Forista


Registrado: 2008-08-18
Mensajes: 786

Publicado: 2014-10-08 21:24:53    Asunto:

La variable de entorno [b:46fb23efac]$IFS[/b:46fb23efac] especifica cual ser? el separador de elementos, por lo general es un espacio. Por eso al listar los elementos, cada espacio que encuentre lo considerar? un archivo diferente.

Puedes establecerte tu $IFS para el bucle y despu?s restaurarlo, por ejemplo en tu c?digo:

[code:1:46fb23efac]#!/bin/bash

echo content-type:text/html
echo
echo "<html>"

echo "<head>"
echo "<BR>"
echo "<title><h3>Listado de archivos</h3></title>"
echo "</head>"

echo "<body>"
echo "<BR>"


GUARDAR_IFS=$IFS
IFS=$(echo -en "\n\b")

for i in $(ls); do
echo "<a href=\"$i\">$i</a>"
done

IFS=$GUARDAR_IFS[/code:1:46fb23efac]

[i:46fb23efac]Salud[/i:46fb23efac][b:46fb23efac]OS[/b:46fb23efac]
miguelgf
Forista


Registrado: 2006-12-28
Mensajes: 621

Publicado: 2014-10-08 21:40:27    Asunto:

Hola.

Tienes unos fallitos peque?os:
- En [code:1:a63876b12c]echo"</head>"
echo"<body>"[/code:1:a63876b12c]te falta un espacio entre echo y lo qye quieres escribir. Tal vez ha sido un error de tecleo al ponerlo en el foro.
- Al final te falta cerrar el body y el html, aunque la mayor?a de navegadores no van a protestar por eso.
- La l?nea [code:1:a63876b12c]echo content-type:text/html[/code:1:a63876b12c] deber?a ser as? [code:1:a63876b12c]echo '<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"'>[/code:1:a63876b12c]poniendo ISO-8859-1 o el juego de caracteres que quieras usar. F?jate que como lo que quieres escribir tiene comillas dobles, he metido todo entre comillas simples.
Con eso corregido, a m? me [b:a63876b12c]funciona bien[/b:a63876b12c], aunque a?n tienes problemas que corregir:
- No puedes navegar por directorios, s?lo procesar ficheros
- El fichero html resultante tiene que estar en la misma carpeta que los ficheros que quieres ver, ya que depende de las rutas y del contexto de apache.

Salvo que est?s haciendo pr?cticas o tengas otros motivos personales para hacerlo manualmente, hay otras soluciones que yo te recomendar?a antes que eso.
- La m?s sencilla, cambia la configuraci?n de apache para permitir en esa(s) carpeta(s) la navegaci?n y con eso apache se encarga ?l solito de hacer lo que t? quieres.
La opci?n es [code:1:a63876b12c]Options +Indexes [/code:1:a63876b12c]Puedes, por ejemplo, configurar as?:
[code:1:a63876b12c]Alias /misitio/ /carpeta/otra/
Alias /misitio /carpeta/otra/
<Directory /carpeta/otra>
Options None
Options +Indexes
Allow from all
</Directory>[/code:1:a63876b12c]
S?lo necesitas que en /carpeta/otra NO exista un index.html ni index.php y ya lo tienes hecho.
- Otra casi igual de sencilla pero m?s vers?til y est?ticamente mejor aunque necesita php es esta: [url]http://www.abeautifulsite.net/php-file-tree/[/url]En mi oficina la usamos para tratar unas carpetas y nadie se ha quejado hasta ahora. Y es facil?simo de instalar.

Saludos.
matiaswsr
Forista


Registrado: 2007-08-03
Mensajes: 74

Publicado: 2014-10-09 23:16:47    Asunto:

Estimados muchas gracias por sus respuestas y ense?anzas!





La marca registrada Linux (R) se usa siguiendo la sublicensia obtenida del "Linux Mark Institute",
el LICENCIATARIO exclusivo de Linus Torvalds, propietario de la marca en EEUU y otros países
The registered trademark Linux (R) is used pursuant to a sublicense from the Linux Mark Institute,
the exclusive LICENSEE of Linus Torvalds, owner of the mark in the U.S. and other countries