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

Re: Ayuda con script de linux

Mensaje por Querubin »

Iba a hacer un chiste con bloques de hormigón pero mejor no.

El caso es que dices que se puede hacer así que ánimo. Desde luego los archivos que he probado me han dejado muy buen sabor de boca con la potencia del C64.
poco a poco
Avatar de Usuario
overCLK !CPC 4
Demonio segundo orden
Demonio segundo orden
Mensajes: 1709
Registrado: 14 Ago 2015, 09:28
Ubicación: Vedra
Has thanked: 3 times
Been thanked: 4 times

Re: Ayuda con script de linux

Mensaje por overCLK »

Hola.

Te incluyo una script como prueba de concepto. Se invoca de la forma:
upload.sh <directory> <device>
Donde:

- directory es el directorio que quieres copiar al disco IECATA. No se comprueba nada, así que los nombres de dentro, tanto archivos como directorios deberían ser como mucho de 16 caracteres.
- device. El disco o imagen en el que quieres escribir (ha de estar al menos formateado a priori).

Necesita el ejecutable iecata, que busca en el mismo path donde se encuentra la utilidad, así que puedes copiar el upload.sh al directorio donde está iecata y probar desde ahí, o cambiar la variable IECATA del script para que apunte a donde lo tengas.

Lo que hace el script es generar una lista de comandos a un fichero temporal y luego pasársela por la entrada estándar al comando iecata. Es muy sencilla y no comprueba nada, pero debería demostrar que se pueden crear varios niveles de directorios. Tampoco hace ascos a intentar crear los directorios varias veces, pero he comprobado que no parece que pase nada por eso, y la imagen se crea sin problemas.

Como es muy pequeña y parece que solo se pueden adjuntar ciertos tipos de archivos, la copio aquí debajo. En realidad el meollo es la invocación a awk sobre la lista de ficheros en el directorio, para que genere los comandos que crean los directorios, importan los ficheros y vuelven a salir de los directorios creados.
Si quieres ver la lista de comandos creados, solo tienes que comentar la línea del final, que la borra, y buscar en el directorio /var/tmp un fichero que se llame commands y un número al final (el pid de la script).

Ya me contarás como va.
#!/bin/bash

MYNAME=$(basename $0)
MYDIR=$(dirname $0)

if [ $# -ne 2 ]; then
    echo "Usage $MYNAME directory device"
    exit 255
fi

INPUT_DIR=$1
OUTPUT_DEVICE=$2
IECATA=$MYDIR/iecata
TMPFILE=/var/tmp/commands$$

if [ ! -d $INPUT_DIR ]; then
    echo "Invalid input directory"
    exit 255
fi

find $INPUT_DIR -type f | awk -F'/' '{ 
    for (i=1; i<NF; i++) { 
        print "mkdir "$i 
        print "cd "$i 
    } 
    print "import",$0,$NF
    for (i=1; i<NF; i++) {
        print "cd .."
    }
}
END { print "q" } ' > $TMPFILE

cat $TMPFILE | $IECATA $OUTPUT_DEVICE 2>&1 >/dev/null
rm -rf $TMPFILE
Imagen
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 »

Genial,

En cuanto pueda lo pruebo y comento.

Como mola.

Gracias.
poco a poco
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 »

Script probado. Para ser una prueba no comienza nada mal.

Copia directorios y su contenido. Tanto archivos como subdirectorios con su correspondiente contenido.

Al cabo de un rato me da error de escritura y no continua pero es un buen comienzo.

Cuando entro en el frontend para ver lo que se ha copiado entro perfectamente en los directorios y subdirectorios. Lo único que al hacer un ls en una carpeta donde hay muchas subcarpetas se queda en bucle mostrando el contenido y no para. No se si es porque supera el número máximo de directorios soportados por IECATA que es 256. Lo comprobaré cuando pueda. Igual es también el origen del error de escritura.

Muy bueno overCLK
poco a poco
Avatar de Usuario
overCLK !CPC 4
Demonio segundo orden
Demonio segundo orden
Mensajes: 1709
Registrado: 14 Ago 2015, 09:28
Ubicación: Vedra
Has thanked: 3 times
Been thanked: 4 times

Re: Ayuda con script de linux

Mensaje por overCLK »

querubin escribió:Script probado. Para ser una prueba no comienza nada mal.

Copia directorios y su contenido. Tanto archivos como subdirectorios con su correspondiente contenido.

Al cabo de un rato me da error de escritura y no continua pero es un buen comienzo.

Cuando entro en el frontend para ver lo que se ha copiado entro perfectamente en los directorios y subdirectorios. Lo único que al hacer un ls en una carpeta donde hay muchas subcarpetas se queda en bucle mostrando el contenido y no para. No se si es porque supera el número máximo de directorios soportados por IECATA que es 256. Lo comprobaré cuando pueda. Igual es también el origen del error de escritura.

Muy bueno overCLK
Es posible. Ten en cuenta que el script simplemente genera una lista de comandos que le inyecta al iecata, como si lo estuvieras ejecutando manualmente.
Imagen
Avatar de Usuario
overCLK !CPC 4
Demonio segundo orden
Demonio segundo orden
Mensajes: 1709
Registrado: 14 Ago 2015, 09:28
Ubicación: Vedra
Has thanked: 3 times
Been thanked: 4 times

Re: Ayuda con script de linux

Mensaje por overCLK »

querubin escribió:Script probado. Para ser una prueba no comienza nada mal.

Copia directorios y su contenido. Tanto archivos como subdirectorios con su correspondiente contenido.

Al cabo de un rato me da error de escritura y no continua pero es un buen comienzo.

Cuando entro en el frontend para ver lo que se ha copiado entro perfectamente en los directorios y subdirectorios. Lo único que al hacer un ls en una carpeta donde hay muchas subcarpetas se queda en bucle mostrando el contenido y no para. No se si es porque supera el número máximo de directorios soportados por IECATA que es 256. Lo comprobaré cuando pueda. Igual es también el origen del error de escritura.

Muy bueno overCLK
Por curiosidad:

¿Te ha fallado escribiendo directamente sobre un disco o sobre una imagen?
¿Me puedes pasar un comprimido con los ficheros y la estructura de directorios que te falla, para ver de reproducirlo?

Hay una cosa rara con el IECATA que no sé si estará relacionada: Si hago una imagen de 10Mb y luego la formateo con el IECATA, el fichero de imagen aumenta de tamaño. Esto me parece muy extraño, como si no tuviera en cuenta el límite físico y escribiese más allá del final del fichero. Supongo que esto mismo si lo haces sobre un disco de verdad en lugar de sobre una imagen, dará un error de escritura como ese que te ha dado.
Imagen
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 »

Directamente sobre el disco.

Te puedo pasar un rar pero pesará un poco ya que es un romset completo. Cofírmamelo y te lo preparo cuando pueda. Lo he probado varias veces formateando el disco primero y el error es aleatorio ya que empieza a copiar por donde le parece. Es decir, tengo una carpeta ROMS con subdirectorios 0, A, B, C, etc... crea la carpeta ROMS y luego empieza por donde le parece. O eso me ha parecido.

Otra observación es que tu script copia rutas absolutas. Quiero decir que si tengo la carpeta en /home/usuario/Descargas/ROMS en el disco destino crea todas esas carpetas. Por eso he pasado la carpeta ROMS a / .
poco a poco
Avatar de Usuario
overCLK !CPC 4
Demonio segundo orden
Demonio segundo orden
Mensajes: 1709
Registrado: 14 Ago 2015, 09:28
Ubicación: Vedra
Has thanked: 3 times
Been thanked: 4 times

Re: Ayuda con script de linux

Mensaje por overCLK »

querubin escribió:Directamente sobre el disco.

Te puedo pasar un rar pero pesará un poco ya que es un romset completo. Cofírmamelo y te lo preparo cuando pueda. Lo he probado varias veces formateando el disco primero y el error es aleatorio ya que empieza a copiar por donde le parece. Es decir, tengo una carpeta ROMS con subdirectorios 0, A, B, C, etc... crea la carpeta ROMS y luego empieza por donde le parece. O eso me ha parecido.

Otra observación es que tu script copia rutas absolutas. Quiero decir que si tengo la carpeta en /home/usuario/Descargas/ROMS en el disco destino crea todas esas carpetas. Por eso he pasado la carpeta ROMS a / .
Perfecto, un rar estará bien. Puedes pasarme un enlace de dropbox o algo así.
Tienes razón en lo del script, asume que el directorio a copiar está en la ruta actual, si no el find mete toda la estructura, pero eso es sencillo de arreglar.
Imagen
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 »

overCLK escribió:He estado echando un ojo a la implementación y no sé si el sistema de ficheros está diseñado desde cero o no
Ese sistema de ficheros es compatible con el de los discos de Commodore, aunque sea en líneas generales ya que no está pensado para grandes volúmenes, sino para discos de 128Kb de SD o del doble si es de DD, pero no lo he estudiado mucho tampoco, supongo que se habrán tomado algunas licencias para que aumente el tamaño sin complicarse demasiado y que sea lo mas compatible posible.
Larga vida y prosperidad \\//_
Avatar de Usuario
overCLK !CPC 4
Demonio segundo orden
Demonio segundo orden
Mensajes: 1709
Registrado: 14 Ago 2015, 09:28
Ubicación: Vedra
Has thanked: 3 times
Been thanked: 4 times

Re: Ayuda con script de linux

Mensaje por overCLK »

javu61 escribió:
overCLK escribió:He estado echando un ojo a la implementación y no sé si el sistema de ficheros está diseñado desde cero o no
Ese sistema de ficheros es compatible con el de los discos de Commodore, aunque sea en líneas generales ya que no está pensado para grandes volúmenes, sino para discos de 128Kb de SD o del doble si es de DD, pero no lo he estudiado mucho tampoco, supongo que se habrán tomado algunas licencias para que aumente el tamaño sin complicarse demasiado y que sea lo mas compatible posible.
En realidad debería dar un poco igual, ¿no? Ya que las llamadas al HD las intercepta el PIC y podrían implementarlo como les diera la gana. Entiendo que incluso se podría implementar una FAT en el PIC y así se podrían utilizar utilidades estándar para escribir los discos ¿o se me escapa algo?
Imagen
Responder

Volver a “Proyectos de software abiertos”