Ayuda con script de linux

Aquí solo proyectos que incluyan el código fuente

Moderador: Fundadores

Reglas del Foro
Si no se incluyen los fuentes, se debe usar el foro de proyectos de software generales
Avatar de Usuario
Querubin
Demonio tercer orden
Demonio tercer orden
Mensajes: 635
Registrado: 15 Ene 2016, 00:01
Ubicación: Totana

Ayuda con script de linux

Mensaje por Querubin »

Me preguntaba si podría alguien echarme una mano con este script de linux

https://github.com/arananet/iecata/blob ... ecsubir.sh

Este es el comando a usar:

ejemplo: sudo ./iecsubir.sh /dev/sdb /c64roms

Lo que hace es leer todo lo que hay en la ruta que se le indique, directorios y subdirectorios y copia todos los archivos en el directorio raiz de la unidad indicada. En el caso del ejemplo copia a sdb todo el contenido de la carpeta y subcarpetas de c64roms.

Lo que me gustaría conseguir es que al copiar los archivos respetara también la estructura de subdirectorios.

El handicap es que el sistema de archivos del disco destino es especial. No tengo ni idea de cual.
poco a poco
Avatar de Usuario
javu61 !Sinclair QL
Fundador
Fundador
Mensajes: 2175
Registrado: 30 Mar 2013, 11:58
Ubicación: Valencia
Been thanked: 76 times
Contactar:

Re: Ayuda con script de linux

Mensaje por javu61 »

Mira estas dos líneas:

fileArray=($(find $DIR -type f))
fileArray1=($(find $DIR -type f -printf "%f\n"))

La primera al usar -type f lo que hace es buscar todos los ficheros del directorio actual y de todos sus subdirectorios, y lo guarda en una variable llamada fileArray siempre con la ruta completa.

La segunda hace lo mismo en otra variable llamada fileArray1, pero el modificador - printf "%f\n" formatea el nombre antes de guardarlo, el \n es un salto de línea, pero el %f lo que le dice es que guarde solo el nombre del fichero, sin su directorio.

No se para que lo usa luego, pero hay que mirar el otro comando que invoca tras el sudo de la penultima línea y estudiar lo que hace.

Y solo por especular, a lo mejor el sistema de archivos destino no soporta subdirectorios y por eso lo hace.

Saludos
Larga vida y prosperidad \\//_
Avatar de Usuario
Querubin
Demonio tercer orden
Demonio tercer orden
Mensajes: 635
Registrado: 15 Ene 2016, 00:01
Ubicación: Totana

Re: Ayuda con script de linux

Mensaje por Querubin »

Gracias por la info.

Añado el resto de archivos del compañero arananet.

https://github.com/arananet/iecata?files=1

En el minuto 6:20 del siguiente video se ve como se crean directorios y se mueve entre ellos.

poco a poco
Avatar de Usuario
javu61 !Sinclair QL
Fundador
Fundador
Mensajes: 2175
Registrado: 30 Mar 2013, 11:58
Ubicación: Valencia
Been thanked: 76 times
Contactar:

Re: Ayuda con script de linux

Mensaje por javu61 »

Le faltan todavía algunos ficheros pero se pueden conseguir en la web del creador original del ICE-ATA.

El problema es que está pensado para simular con un disco duro el comportamiento de la disquetera de un C64, y el sistema de archivos que usaba Commodore era similar al original del CP/M, con una tabla fija de entradas al principio del disco, ya que para un disquete no hacía falta mas pues no había sitio para cientos de ficheros.

No soporta el manejo de directorios, por eso los elimina al copiar al disco duro de destino, y por eso los nombres los pasa a mayúsculas y elimina espacios y caracteres que no sean letras y números, que tampoco los soporta el C64.
Larga vida y prosperidad \\//_
Avatar de Usuario
Querubin
Demonio tercer orden
Demonio tercer orden
Mensajes: 635
Registrado: 15 Ene 2016, 00:01
Ubicación: Totana

Re: Ayuda con script de linux

Mensaje por Querubin »

Entonces, la solución ¿es pasar los archivos por lotes e ir metiendolos en sus carpetas uno a uno en el C64?
poco a poco
Avatar de Usuario
javu61 !Sinclair QL
Fundador
Fundador
Mensajes: 2175
Registrado: 30 Mar 2013, 11:58
Ubicación: Valencia
Been thanked: 76 times
Contactar:

Re: Ayuda con script de linux

Mensaje por javu61 »

Por lo que veo debes crearte un directorio en tu PC con todo lo que quieras meter en el disco destino, dentro puedes tener subdirectorios sin problemas, y la utilidad lo que hace es tomar todos los ficheros estén en ese directorio o en alguno que cuelge del mismo y copiarlos al disco en un solo directorio, por tanto no hace falta que lo hagas por lotes, con crear el directorio en tu PC con todo es suficiente, pero tampoco he visto con detalle como los va montando en el disco de destino, por lo que no se como se comportará con nombres de ficheros repetidos, ante eso yo supongo que es mejor tenerlos todos en un solo directorio en tu PC, para evitar duplicidades, aunque eso debe ser limitante en cuanto a lo que puedes guardar en ellos.

Por desgracia no es posible usar subdirectorios directamente, ya que el C64 no los puede manejar.
Larga vida y prosperidad \\//_
Avatar de Usuario
Querubin
Demonio tercer orden
Demonio tercer orden
Mensajes: 635
Registrado: 15 Ene 2016, 00:01
Ubicación: Totana

Re: Ayuda con script de linux

Mensaje por Querubin »

Muchas gracias, de verdad.

Pero parece ser que solo lo copia al directorio raiz no a cualquier directorio. Si pudiera copiarlo a un directorio concreto facilitaría algo la cosa. ¿se puede?

El problema es pasar un romset completo. Además, el número de archivos por directorio está limitado también.
poco a poco
Avatar de Usuario
javu61 !Sinclair QL
Fundador
Fundador
Mensajes: 2175
Registrado: 30 Mar 2013, 11:58
Ubicación: Valencia
Been thanked: 76 times
Contactar:

Re: Ayuda con script de linux

Mensaje por javu61 »

A ver si me explico mejor. El origen es donde tienes tus archivos, el destino es el disco donde vas a grabar los ficheros.

El origen es un directorio de tu máquina con ficheros, que a su vez puede contener otros sub-directorios con ficheros, todos los ficheros que se encuentren en esa estructura de directorios será copiado al destino.

El destino es un disco que simula un disquete de C64 usando un disco duro en su lugar, como el sistema de archivos del C64 no soporta subdirectorios, todos son copiados a la raiz de ese disco, que está formateado para que lo reconozca el C64 como un disco con su formato.

Por tanto esa partición especial comienza con una tabla de ficheros en el que está el nombre del fichero en mayúsculas, máximo 8 caracteres mas punto mas 3 de extensión, el tamaño, la fecha, y donde comienza físicamente en el disco. No se donde se guarda la tabla de sectores que ocupa cada fichero, eso ya es curiosidad de como lo hace, por ejemplo en CP/M se guarda en una tabla de bloques en la propia entrada de directorio del fichero, por lo que si un fichero ocupa muchos sectores utiliza varias entradas, mientras que en MS.DOS usa una tabla separada que denomina FAT.

Por tanto, nunca vas a poder tener separado en directorios el destino, sino que todos irán juntos en un solo directorio.

Saludos
Larga vida y prosperidad \\//_
Avatar de Usuario
tactica
Demonio segundo orden
Demonio segundo orden
Mensajes: 1888
Registrado: 20 Ene 2015, 20:39
Ubicación: La Coruña
Has thanked: 11 times
Been thanked: 17 times

Re: Ayuda con script de linux

Mensaje por tactica »

¿Y cómo funciona entonces el "navegador" del SD2IEC? Porque ése sí que parece entrar en subdirectorios, al menos un nivel...
Avatar de Usuario
javu61 !Sinclair QL
Fundador
Fundador
Mensajes: 2175
Registrado: 30 Mar 2013, 11:58
Ubicación: Valencia
Been thanked: 76 times
Contactar:

Re: Ayuda con script de linux

Mensaje por javu61 »

Para saber eso hay que navegar en el código de cada sistema y verlo. Lo que he visto del script que está preguntando hace eso de montar todo en un solo directorio, lo del SD2IEC no tengo ni idea pues no lo he visto.

Por especular puede hacer lo mismo que hacía el CP/M, en las entradas del directorio de ficheros para cada fichero se guardaba un número adicional, y se podía seleccionar que número queríamos ver, de esta forma simulaba los directorios, aunque de forma muy limitada. El MS.DOS en cambio una entrada de directorio es un fichero mas del disco, en su interior monta una estructura de ficheros igual que la raiz, por eso podía tener indefinidos directorios (salvo en el raiz que solo admite tener 256 ficheros creo recordar que son las entradas del directorio raiz), e indefinidos niveles. Unix usa un sistema similar, pero en lugar de las FAT usa un sistema denominado iNodes con la información.

Hay que pensar que estos sistemas nacen en discos de 160Kb, y en el C64 ya se alcanzan los 360Kb, no es mucho y por tanto no hacen falta directorios.
Larga vida y prosperidad \\//_
Responder

Volver a “Proyectos de software abiertos”