Muchas gracias por tus recomendaciones. Voy a revisar de nuevo el script para ver si puedo arreglar los problemas que me comentas, iré poco a poco porque no creas que terminé de comprender lo que dijiste. De verdad muchas gracias.
por
pobrecito hablador
el Martes, 17 Febrero de 2009, 18:41h
(#1128390)
De nada;-)
Me explico de nuevo:-) Bash, por defecto, separa campos en los caracteres espacio, tabulador y nueva línea. Así que si tienes un fichero, por ejemplo, "directorio/electric dreams.avi"... en una iteración del for, con $i obtienes "directorio/electric" y en la siguiente iteración, "dreams.avi". Una forma de solucionarlo es redefinir IFS para que el único separador de campos sea el caracter nueva línea. Está explicado en el enlace que puse y en la Advanced Bash-Scripting Guide.
Lo segundo que te comentaba es el problema que ocurre cuando ejecutas el script con el argumento terminado con una barra: "./dir2html.sh directorio/" Cosa que ocurre siempre que en lugar de escribir el nombre completo, le des a TAB para completarlo. Un sed falla porque tratas de sustituir "a href='$1/", y en este caso te quedaría "a href='directorio//" y lógicamente no lo encuentra. Con el otro sed pasa lo mismo, buscas "a href='$1'", es decir "a href='directorio/'" y esa cadena no la encuentra porque find al imprimir los nombres de directorios no les añade la barra. El problema lo solucionas expandiendo el argumento de entrada así: ${1%/}, en lugar de haciendo simplemente $1, lo que elimina la barra del final en caso de que la haya. Es decir tendrías que poner: "a href='${1%/}/" y "a href='${1%/}'", respectivamente. Los distintos modos de expandir variables están explicados en el enlace que te puse a la Advanced Bash-Scripting Guide. Uno de ellos te permite eliminar el path de un nombre, por lo que te ahorrarías el sed que usas para ello. Te pongo un ejemplo:
Re:Más recomendaciones
(Puntos:1)( Última bitácora: Martes, 12 Enero de 2010, 19:47h )
Re:Más recomendaciones
(Puntos:0)Me explico de nuevo
Lo segundo que te comentaba es el problema que ocurre cuando ejecutas el script con el argumento terminado con una barra: "./dir2html.sh directorio/" Cosa que ocurre siempre que en lugar de escribir el nombre completo, le des a TAB para completarlo. Un sed falla porque tratas de sustituir "a href='$1/", y en este caso te quedaría "a href='directorio//" y lógicamente no lo encuentra. Con el otro sed pasa lo mismo, buscas "a href='$1'", es decir "a href='directorio/'" y esa cadena no la encuentra porque find al imprimir los nombres de directorios no les añade la barra. El problema lo solucionas expandiendo el argumento de entrada así: ${1%/}, en lugar de haciendo simplemente $1, lo que elimina la barra del final en caso de que la haya. Es decir tendrías que poner: "a href='${1%/}/" y "a href='${1%/}'", respectivamente. Los distintos modos de expandir variables están explicados en el enlace que te puse a la Advanced Bash-Scripting Guide. Uno de ellos te permite eliminar el path de un nombre, por lo que te ahorrarías el sed que usas para ello. Te pongo un ejemplo:
$ var=/path/de/prueba/fichero
$ echo ${var##*/}
fichero
Saludos.