Encuesta

¿Podría interesar un manual de primeros pasos en bash?

Si, pero solo si empezamos de cero, no tengo ni idea de bash
5 (55.6%)
Si, tengo algunos conocimientos pero me interesaría profundizar el el tema de scripts
4 (44.4%)
Ni fu, ni fa
0 (0%)
No, no quiero perder el tiempo con incomprensibles comandos.
0 (0%)

Total de votos: 9

Votación cerrada: 18 ago 2007, 10:48 am

Autor Tema: Primeros pasos en BASH  (Leído 47515 veces)

redy

  • Moderador
  • Bimilenari@
  • *****
  • Mensajes: 2897
  • Gnudista
    • Esteropes El Cíclope
Primeros pasos en BASH
« on: 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.)
« Última Modificación: 11 nov 2008, 06:37 am por tat »
Admiro a la gente que sabe contar historias solamente con sus fotos, porque en el fondo las fotos son como los chistes; si tienes que explicarlas es que no son buenas...


elpecoso

  • Milenari@
  • *
  • Mensajes: 1471
  • Esto es lo que somos
    • La madriguera del escobrice
Re: PRIMEROS PASOS EN BASH
« Respuesta #1 on: 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!
Me gustaría cambiar el mundo, pero no me dan el código fuente
<- La ultima de La madriguera del escobrice

Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Re: PRIMEROS PASOS EN BASH
« Respuesta #2 on: 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
« Última Modificación: 19 jul 2007, 12:01 pm por Colegota »
[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]

elpecoso

  • Milenari@
  • *
  • Mensajes: 1471
  • Esto es lo que somos
    • La madriguera del escobrice
Re: PRIMEROS PASOS EN BASH
« Respuesta #3 on: 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!
« Última Modificación: 19 jul 2007, 19:08 pm por elpecoso »
Me gustaría cambiar el mundo, pero no me dan el código fuente
<- La ultima de La madriguera del escobrice

Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Re: PRIMEROS PASOS EN BASH
« Respuesta #4 on: 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
[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]

elpecoso

  • Milenari@
  • *
  • Mensajes: 1471
  • Esto es lo que somos
    • La madriguera del escobrice
Re: PRIMEROS PASOS EN BASH
« Respuesta #5 on: 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!
Me gustaría cambiar el mundo, pero no me dan el código fuente
<- La ultima de La madriguera del escobrice

redy

  • Moderador
  • Bimilenari@
  • *****
  • Mensajes: 2897
  • Gnudista
    • Esteropes El Cíclope
Re: PRIMEROS PASOS EN BASH
« Respuesta #6 on: 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

« Última Modificación: 20 jul 2007, 09:18 am por redy »
Admiro a la gente que sabe contar historias solamente con sus fotos, porque en el fondo las fotos son como los chistes; si tienes que explicarlas es que no son buenas...


redy

  • Moderador
  • Bimilenari@
  • *****
  • Mensajes: 2897
  • Gnudista
    • Esteropes El Cíclope
Re: PRIMEROS PASOS EN BASH
« Respuesta #7 on: 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?

« Última Modificación: 20 jul 2007, 10:11 am por redy »
Admiro a la gente que sabe contar historias solamente con sus fotos, porque en el fondo las fotos son como los chistes; si tienes que explicarlas es que no son buenas...


redy

  • Moderador
  • Bimilenari@
  • *****
  • Mensajes: 2897
  • Gnudista
    • Esteropes El Cíclope
Re: PRIMEROS PASOS EN BASH
« Respuesta #8 on: 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


Admiro a la gente que sabe contar historias solamente con sus fotos, porque en el fondo las fotos son como los chistes; si tienes que explicarlas es que no son buenas...


tat

  • Moderador
  • Palizas oficial
  • *****
  • Mensajes: 9622
  • Patch y buenas vibraciones
    • Libertat
Re: PRIMEROS PASOS EN BASH
« Respuesta #9 on: 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:

redy

  • Moderador
  • Bimilenari@
  • *****
  • Mensajes: 2897
  • Gnudista
    • Esteropes El Cíclope
Re: PRIMEROS PASOS EN BASH
« Respuesta #10 on: 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 para responder, hacerlo por aquí mismo....
Admiro a la gente que sabe contar historias solamente con sus fotos, porque en el fondo las fotos son como los chistes; si tienes que explicarlas es que no son buenas...


gecko

  • Veteran@
  • *****
  • Mensajes: 492
    • A un "clic" de la realidad
Re: PRIMEROS PASOS EN BASH
« Respuesta #11 on: 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:)

tat

  • Moderador
  • Palizas oficial
  • *****
  • Mensajes: 9622
  • Patch y buenas vibraciones
    • Libertat
Re: PRIMEROS PASOS EN BASH
« Respuesta #12 on: 14 sep 2007, 11:20 am »
Yo también me lo he leído y ya estoy ansioso por leer la segunda parte  :-) ánimo!

Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Re: PRIMEROS PASOS EN BASH
« Respuesta #13 on: 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
[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]

redy

  • Moderador
  • Bimilenari@
  • *****
  • Mensajes: 2897
  • Gnudista
    • Esteropes El Cíclope
Re: PRIMEROS PASOS EN BASH
« Respuesta #14 on: 16 sep 2007, 07:35 am »
Vamos, que también estoy esperando la segunda entrega

Marchando
Admiro a la gente que sabe contar historias solamente con sus fotos, porque en el fondo las fotos son como los chistes; si tienes que explicarlas es que no son buenas...