[Comunidad FotoLibre]

Ayuda => Manuales => Mensaje iniciado por: redy en 19 jul 2007, 10:48 am

Título: Primeros pasos en BASH
Publicado por: redy en 19 jul 2007, 10:48 am
Más que nada porque Colegota proponía hacer un manual de scripting con imagemagick, y creo que unas buenas pinceladas de bash primero son imprescindibles ¿no? Si veo que hay interes hasta igual me ofrezco voluntario para contaros lo que pueda sobre el bash, y luego veremos como aplicarlo para hacer scripts con imagemagick. Se admiten todo tipo de propuestas.


(editado por tat para poner el título en minúsculas.)
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: elpecoso en 19 jul 2007, 11:24 am
no estaria mal...
la verdad es que con imagemagick se pueden hacer chorricientas cosas y no estaria mal echarle un ojo...

por cierto, en el script que yo uso para redimensionar...

Código: [Seleccionar]
#!/bin/bash
for i in *.JPG ; do

convert -resize 50%x50% -verbose $i $i

done

como podria hacer para que me pusiese por ejemplo el lado mas largo a 800 y el otro me mantuviera las proporciones?

chau!
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: Colegota en 19 jul 2007, 11:53 am
Buenas,

como podria hacer para que me pusiese por ejemplo el lado mas largo a 800 y el otro me mantuviera las proporciones?

http://www.imagemagick.org/script/command-line-options.php#resize

Los valores especificados si no dices nada son valores "máximos". Es decir, si pones -resize 800x600 ninguno de los dos lados pasará esas dimensiones. Si quieres que sean exactamente 800x600 deberás poner -resize 800x600 ! 

También puedes especificar uno de los lados, como por ejemplo -resize 800x o -resize x640. En este caso el otro lado se adapta para mantener la proporción. Interesante por ejemplo para redimensionar una panorámica que no sea demasiado alta para que se vea la parte vertical completa en la pantalla aunque para la horizontal haya que desplazarse con las barras.

Con un poco de suerte acabo haciendo una descripción traducción de los principales comandos mientras redy hace lo propio con el de bash.  :)o
Lo que pasa es que prefiero terminar primero con el de las fotos para niños por no dejar tantas cosas empezadas.

Saludos,
Colegota
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: elpecoso en 19 jul 2007, 18:45 pm
bien, entonces para que me redimensione las fotos horizontales a 800x lo que sea y las verticales a "loquesea"x800 tengo que poner 800x800

ya lo he comprobado y funciona, muchas gracias!

ahora que significan las 3 lineas que salen por cada archivo:
Código: [Seleccionar]
chicas.jpg JPEG 3872x2592 DirectClass 1.5mb 1.160u 0:02
chicas.jpg JPEG 3872x2592=>640x428 DirectClass 1.5mb 1.750u 0:03
chicas.jpg JPEG 3872x2592=>640x428 DirectClass 90kb
y como puedo poner un sufijo a las fotos redimensionadas sin que me sobreescriba las "buenas" que es lo que me hace ahora
por ejemplo que sea chicas_p.jpg

ahora bash...

como hago para que el ciclo for recorra tanto las JPG como las jpg y no me de este aviso cuando no haya ninguna JPG
Código: [Seleccionar]
convert: unable to open image `*.JPG': No existe el fichero ó directorio.
mi script mas o menos va asi:
Código: [Seleccionar]
#!/bin/bash
for i in *.JPG *.jpg ; do

convert -resize 700x700 -mattecolor "#000000" -frame 1x1 -mattecolor "#ffffff" -frame 3x3 -mattecolor "#000000" -frame 6x6 $i $i

done
con lo cual obtengo una imagen de 720x con marco para poner en mi pagina

chau!
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: Colegota en 19 jul 2007, 20:50 pm
Buenas,

revisa el manual: http://www.imagemagick.org/script/convert.php

Código: [Seleccionar]
convert origen.jpg [modificaciones] destino.jpg
¿tienes imágenes con la extensión en mayúsculas? Prueba:

Código: [Seleccionar]
#!/bin/bash
for i in *.jpg ; do

convert "$i" -resize 700x700 -mattecolor "#000000" -frame 1x1 -mattecolor "#ffffff" -frame 3x3 -mattecolor "#000000" -frame 6x6 p_"$i"

done

Eso te creará una imagen p_chicas.jpg. Si quieres intercalar la p antes de la extensión espera  a que Redy haga el curso de bash.  ;)

Lo que queda de semana ando liadillo, la próxima intento hacer un "Imagemagick de andar por casa".

Saludos,
Colegota
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: elpecoso en 20 jul 2007, 04:58 am
tengo imágenes con la extensión en mayúsculas (las que salen de la cámara) y con extensión en minúsculas (las editadas), por eso puse *.JPG y *.jpg

lo que ocurre es que cuando no hay de una de las dos clases, me sale ese aviso, que no tiene mayor importancia, porque el script funciona perfectamente...

en cuanto a lo de renombrar las imágenes, francamente no se me había ocurrido ponerlo como prefijo  :-)

de todos modos, a ver que cuenta maese Redy de ponerlo como sufijo, porque así las imágenes me quedarían mas ordenadas (chicas_p.jpg inmediatamente después de chicas.jpg)

chau!
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: redy en 20 jul 2007, 09:03 am
tengo imágenes con la extensión en mayúsculas (las que salen de la cámara) y con extensión en minúsculas (las editadas), por eso puse *.JPG y *.jpg

Prueba:
Código: [Seleccionar]
for i in *.[jJ][pP][gG]: do
....
done

O mejor todavía métele una 'e' (mayúscula o minúscula) opcional, así funcionará con cualquier fichero con extensión JPG, jpg, Jpg, JPEG, jpeg, Jpeg, jPeG etc...

Código: [Seleccionar]
for i in *.[jJ][pP]?([eE])[gG]: do
....
done

Esta segunda forma puede darte un error si no está activada la opción 'extglob' si es así ponle antes el comando

Código: [Seleccionar]
shopt -s extglob

Título: Re: PRIMEROS PASOS EN BASH
Publicado por: redy en 20 jul 2007, 09:57 am
de todos modos, a ver que cuenta maese Redy de ponerlo como sufijo, porque así las imágenes me quedarían mas ordenadas (chicas_p.jpg inmediatamente después de chicas.jpg)

Si el sufijo fuese conocido, bastaría con:

Código: [Seleccionar]
for i in *.jpg; do
   convert -resize bla-bla-bla "$i" "$(basename $i .jpg)-p.jpg"
done

El comando basename extrae de un nombre de fichero toda la parte que corresponde al directorio y deja solo el nombre, y si se pasa un segundo parámetro que será el sufijo y este coincide exactamente con el final del nombre del fichero lo quita también. Luego simplemente hago uso de la sustitución de comando $().

Pero como hemos puesto el patrón múltiple resulta que el sufijo puede ser Jpg, JPEG o cualquiera de las posibles variantes. Así que lo único que se me ocurre es mirar antes cual es el sufijo, para extraerlo tal que así:

Código: [Seleccionar]
for i in *.[jJ][pP]?([eE])[gG]; do
    SUFIJO=".${i##*.}"
    convert -resize bla-bla-bla "$i" "$(basename $i $SUFIJO)-p$SUFIJO"
done

La expansión ${variable##patrón} sustrae de la variable desde el principio la parte más larga que coincide con el patrón. Luego hay otras expansiones como $(variable%%patron) que hacen lo mismo por el final, pero eso lo dejamos para el curso ¿no?

Título: Re: PRIMEROS PASOS EN BASH
Publicado por: redy en 22 jul 2007, 10:06 am
Código: [Seleccionar]
for i in *.[jJ][pP]?([eE])[gG]; do
    SUFIJO=".${i##*.}"
    convert -resize bla-bla-bla "$i" "$(basename $i $SUFIJO)-p$SUFIJO"
done

La expansión ${variable##patrón} sustrae de la variable desde el principio la parte más larga que coincide con el patrón. Luego hay otras expansiones como $(variable%%patron) que hacen lo mismo por el final, pero eso lo dejamos para el curso ¿no?

Aunque ahora que lo pienso, igual queda más claro si pasamos totalmente del basename y usamos las expansiones de variables de bash solo:

Código: [Seleccionar]

shopt -s extglob
# (Por si acaso, para que funcione el patrón '?([eE])')

for i in *.[jJ][pP]?([eE])[gG]; do
    SUFIJO="${i##*.}"
    PREFIJO="${i%.*}"
    convert -resize bla-bla-bla "$i" "${PREFIJO}-p.${SUFIJO}"
done


Título: Re: PRIMEROS PASOS EN BASH
Publicado por: tat en 26 jul 2007, 10:00 am
Adelante con ese cursillo, me interesa. Gracias por dedicarle vuestro tiempo y recursos a compartir conocimientos con la comunidad  :plas:
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: redy en 13 sep 2007, 08:23 am
Adelante con ese cursillo, me interesa.

Bueno pues como veo que hay algún interés en ello empiezo a largar mi rollo en mi blog de fotolibre (http://redy.fotolibre.net/como/curso-de-bash-para-fotografos-linuxeros/) para responder, hacerlo por aquí mismo....
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: gecko en 13 sep 2007, 15:57 pm
Yo ya me he leído  "tu rollo en tu blog",  :lee: y estoy impaciente por la segunda entrega.

Lo que sé de informática lo aprendí en la red de gente como tú (y otros miembros de este foro), con ganas de compartir altruístamente lo que sabe. Gracias anticipadas por el curre en el que te has metido y  :plas:


 q:)
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: tat en 14 sep 2007, 11:20 am
Yo también me lo he leído y ya estoy ansioso por leer la segunda parte  :-) ánimo!
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: Colegota en 15 sep 2007, 09:00 am
Buenas,

yo la teoría me la se. De hecho, programaba en máquinas Unix en tiempos, pero como ya habéis podido comprobar se me ha olvidado mucho...  :)o
Vamos, que también estoy esperando la segunda entrega que aprovecharé para ponerme al día.  :ejem:

Saludos,
Colegota
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: redy en 16 sep 2007, 07:35 am
Vamos, que también estoy esperando la segunda entrega

Marchando (http://redy.fotolibre.net/como/curso-de-bash-para-fotografos-linuxeros-1-toma-de-contacto/)
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: tat en 16 sep 2007, 15:08 pm
vamos bien, vamos bien, muy interesante  :-) gracias
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: gecko en 16 sep 2007, 16:33 pm
 :lee: :lee:  :-)
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: kurtsik en 17 sep 2007, 16:49 pm
Aupa Redy.

Muy curiosa e instructiva la segunda entrega :-)

Ansioso de massssss  :v
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: redy en 18 sep 2007, 03:54 am
Ansioso de massssss  :v

Paciencia, paciencia, las cosas suelen salir mejor si se hacen despacito...
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: redy en 19 sep 2007, 15:48 pm
Curso de bash para fotógrafos linuxeros. (2) Empezamos a meternos en harina (http://redy.fotolibre.net/fotolibre/curso-de-bash-para-fotografos-linuxeros-2-empezamos-a-meternos-en-harina/)
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: redy en 26 sep 2007, 13:31 pm
Curso de bash para fotógrafos linuxeros. (3) Usando las comillas (http://redy.fotolibre.net/como/curso-de-bash-para-fotografos-linuxeros-3-usando-las-comillas/)
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: gecko en 27 sep 2007, 16:59 pm
 :lee:
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: tat en 27 sep 2007, 22:16 pm
yo no he dicho nada pero también lo sigo, estoy terminando el (2). Merci
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: redy en 02 oct 2007, 08:10 am
Curso de bash para fotógrafos linuxeros. (4) Las llaves y los comodines (http://redy.fotolibre.net/como/curso-de-bash-para-fotografos-linuxeros-4-las-llaves-y-los-comodines/)
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: tat en 02 oct 2007, 08:36 am
Vamos, vamos que nos vamos  :plas: :plas: :plas: :plas: :plas: ole y gracias
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: redy en 02 oct 2007, 18:49 pm
Curso de bash para fotógrafos linuxeros. (4) Las llaves y los comodines (http://redy.fotolibre.net/como/curso-de-bash-para-fotografos-linuxeros-4-las-llaves-y-los-comodines/)

En las últimas entregas suelo acabar con una pregunta. Si queréis podéis responderla por aquí y comentamos las respuestas. Si hay dudas, correcciones, o comentarios de cualquier tipo también. ¿Lo veis adecuado? ¿Demasiado breve? ¿Demasiado extenso? ¿Me enrollo demasiado? ¿No se me entiende lo que intento explicar...?
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: redy en 22 oct 2007, 10:56 am
Curso de bash para fotógrafos linuxeros. (5) Hola mundo (http://redy.fotolibre.net/como/curso-de-bash-para-fotografos-linuxeros-5-hola-mundo/)

A ver si nos animamos...
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: redy en 22 oct 2007, 19:04 pm
Si hay dudas.

Bueno, Redy, ya que lo dices, yo tengo una duda :) con respecto a la expansión de nombres de ruta:

Dices que cuando hay un patrón de esos se expande y se convierte en tantas palabras como nombres de fichero coincidan con ese patrón. Pero ¿que ocurre si pongo un patrón que no coincide con ningún fichero? ¿Como lo expande bash, como una cadena vacía?  :?
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: redy en 22 oct 2007, 19:17 pm
¿que ocurre si pongo un patrón que no coincide con ningún fichero? ¿Como lo expande bash, como una cadena vacía?

Buena pregunta Redy :) . En realidad la respuesta correcta a esa pregunta sería 'depende'.

En oprincipio si el patrón no coincide con ningun fichero no se expande, se queda tal cual. Por ejemplo

$ echo /usr/bin/*.txt
/usr/bin/*.txt


Pero se puede cambiar ese comportamiento con una opción de bash. Es la opción 'nullglob', y si está activa cuando no haya ninguna coincidencia el patrón se remplaza por una cadena vacía, es decir se borra, en cambio si está inactiva se conserva tal como se escribió. Para activar esa opción usaremos el comando 'shopt -s nullglob' y para desactivarla 'shopt -u nullglob'. Los cambios durarán hasta que finalice la sesión de bash o se cambien de nuevo:


$ shopt -s nullglob
$ echo /usr/bin/*.txt

$ shopt -s nullglob
$ echo /usr/bin/*.txt
/usr/bin/*.txt


Porque ya sabéis que el que no pregunta nada, o lo sabe todo, o no sabe nada. ...
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: invisible en 22 oct 2007, 19:18 pm
Te prometo que algún día me pondré...  :)o
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: tat en 23 oct 2007, 04:30 am
Porque ya sabéis que el que no pregunta nada, o lo sabe todo, o no sabe nada. ...
yo soy de los del segundo grupo, pero con la ayuda de tu curso espero ponerle algo de remedio  :-)
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: Colegota en 23 oct 2007, 12:44 pm
Buenas,

yo no digo nada, pero cuando no mira nadie me los grabo en disco duro para cuando no tenga conexión.  :shss:
Como el "efecto Tat" y algún otro de Tomy que tenía pendientes de hincar el diente.  B)

Saludos,
Colegota
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: redy en 26 oct 2007, 08:57 am
Curso de bash para fotógrafos linuxeros. (6) Variables y parámetros (http://redy.fotolibre.net/como/curso-de-bash-para-fotografos-linuxeros-6-variables-y-parametros/) :lee: :taclaro:
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: redy en 30 oct 2007, 20:19 pm
Curso de bash para fotógrafos linuxeros. (7) Comandos internos y externos. Órdenes compuestas. (http://redy.fotolibre.net/como/curso-de-bash-para-fotografos-linuxeros-7-comandos-internos-y-externos-ordenes-compuestas/)

Creo que este es un cápítulo algo peliagudo, sobre todo para el usuario novel en temas de programación, ya que se introducen conceptos tales como programa, proceso, logica de Boole... Tomároslo con calma y preguntar por las dudas que os surjan, creo que todo estobase fundamental para ir entendiendo lo que ha de venir...
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: redy en 02 nov 2007, 11:25 am
Como he comprobado que se pueden poner anclas html en los posts de WP, se las fuí poniendo (en los últimos capítulos, me faltan los primeros) y he montado un índice, que ya con todo lo publicado buena falta hace.

http://redy.fotolibre.net/esteropes/curso-de-bash-para-fotografos-linuxeros/
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: tomas.senabre en 11 nov 2007, 07:14 am
Eres un monstruo Redy, yo utilizo el bash habitualmente para el trabajo, había leído muchos manuales de cursos, sobre este tema, pero la verdad que el tuyo está muy bien explicado, tienes un don para la didáctica  :ok:
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: redy en 29 ene 2008, 21:07 pm
Perdonad si ha decaído un poco la frecuencia de capítulos del curso, pero es que ando liado con otro proyecto (http://redyarcade.wordpress.com/) que nada tiene que ver con la fotografía ni con el bash. Si es que cuando uno tiene más aficiones que tiempo, pasa lo que pasa...

Pero sigo en ello, y en cuanto pueda pongo el capítulo 10...

Título: Re: PRIMEROS PASOS EN BASH
Publicado por: invisible en 30 ene 2008, 05:15 am
Salud, redy:
pero es que ando liado con otro proyecto (http://redyarcade.wordpress.com/) que nada tiene que ver con la fotografía ni con el bash
Ya me decía yo: "¿Qué carallo andará liando redy que se le ve poco por aquí...? Menuda pasada de invento, digno del programa "bricomanía" (o "frikimanía" :P). q:)
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: redy en 26 mar 2008, 11:26 am
Pero sigo en ello, y en cuanto pueda pongo el capítulo 10...

Puesto: (10) Aritmética sencilla (http://redy.fotolibre.net/como/curso-de-bash-para-fotografos-linuxeros-10-aritmetica-sencilla/)
Título: Re: PRIMEROS PASOS EN BASH
Publicado por: Colegota en 27 mar 2008, 13:59 pm
Buenas,

Puesto: (10) Aritmética sencilla (http://redy.fotolibre.net/como/curso-de-bash-para-fotografos-linuxeros-10-aritmetica-sencilla/)

curioso lo de los "cálculos" para contar el ganado.  :)))

Gracias por el trabajo. Está muy bien documentado, sirve de referencia y se hace ameno.

Saludos,
Colegota