Discussion:
Script para ejecutar un comando en cada directorio
Josu Lazkano
2018-09-04 20:22:35 UTC
Permalink
Buenas,

Me estoy volviendo loco con un pequeño problema que tengo.

Tengo que convertir un montón de fotos que tengo ordenados en
directorios. Lo que quiero es ejecutar un script en la raiz de un
directorio, y que se ejecute un comando dentro de cada directorio.

El arbol de directorios sera asi:

/fotos/
/fotos/2018-01 - Viaje a noseque/
/fotos/2018-03 - Cena de amigos/
/fotos/2018-08 - Verano con la familia/

El comando es el siguiente:

mogrify -delete 1 -format jpg -- *.tif

Como puedo hacer un bash que ejecutado en el directorio /fotos/, pueda
entrar cada directorio y ejecutar ese comando?

Otra forma seria cambiar el comnado para fuese algo asi: (con la
variable $directorio)

mogrify -delete 1 -format jpg -- $directorio/*.tif

¿alguien me puede ayudar con esto?

Gracias por todo.

Un saludo.
--
Josu Lazkano
fernando sainz
2018-09-04 21:04:20 UTC
Permalink
Post by Josu Lazkano
Buenas,
Me estoy volviendo loco con un pequeño problema que tengo.
Tengo que convertir un montón de fotos que tengo ordenados en
directorios. Lo que quiero es ejecutar un script en la raiz de un
directorio, y que se ejecute un comando dentro de cada directorio.
/fotos/
/fotos/2018-01 - Viaje a noseque/
/fotos/2018-03 - Cena de amigos/
/fotos/2018-08 - Verano con la familia/
mogrify -delete 1 -format jpg -- *.tif
Como puedo hacer un bash que ejecutado en el directorio /fotos/, pueda
entrar cada directorio y ejecutar ese comando?
Otra forma seria cambiar el comnado para fuese algo asi: (con la
variable $directorio)
mogrify -delete 1 -format jpg -- $directorio/*.tif
¿alguien me puede ayudar con esto?
Gracias por todo.
Un saludo.
--
Josu Lazkano
Hola.

Te doy una pista, con el comando find con la opción -exec o con | xargs.

https://www.everythingcli.org/find-exec-vs-find-xargs/

S2.
j***@escomposlinux.org
2018-09-05 12:16:38 UTC
Permalink
Post by Josu Lazkano
Buenas,
Me estoy volviendo loco con un pequeño problema que tengo.
Tengo que convertir un montón de fotos que tengo ordenados en
directorios. Lo que quiero es ejecutar un script en la raiz de un
directorio, y que se ejecute un comando dentro de cada directorio.
/fotos/
/fotos/2018-01 - Viaje a noseque/
/fotos/2018-03 - Cena de amigos/
/fotos/2018-08 - Verano con la familia/
mogrify -delete 1 -format jpg -- *.tif
Como puedo hacer un bash que ejecutado en el directorio /fotos/, pueda
entrar cada directorio y ejecutar ese comando?
Otra forma seria cambiar el comnado para fuese algo asi: (con la
variable $directorio)
mogrify -delete 1 -format jpg -- $directorio/*.tif
¿alguien me puede ayudar con esto?
Hola,

Una forma de hacerlo es mediante un script, algo así:

#!/bin/bash
cd fotos
for i in $(ls -R); do
mogrify --parametros --que --necesites $i
done

Igual falta algún ; o algo...

Un saludo

JulHer
Antonio Galicia
2018-09-05 23:31:00 UTC
Permalink
El 4 de septiembre de 2018, 15:22, Josu
Post by Josu Lazkano
/fotos/
/fotos/2018-01 - Viaje a noseque/
/fotos/2018-03 - Cena de amigos/
/fotos/2018-08 - Verano con la familia/
mogrify -delete 1 -format jpg -- *.tif
Hola, buen día.

Intenta con algo así:

find {path} -type d | while read p; do cd "$p"; mogrify -delete 1
-format jpg -- *.tif ; done

El {path} siempre lo debes colocarlo con la ruta abasoluta dado que va
a estar cambiando y puede que no lo encuentre si lo indicas de manera
relativa.

Esto es, la ruta la debes poner "/home/user/fotos" y no hacer un cd
/home/user y poner "fotos" como path

Y claro, puedes hacer

find fotos -type f -name '*.tif' -print0 | xargs -0 mogrify
-delete 1 -format jpg --

El print0 es para que los espacios en los nombres no genere problema

Uno de los dos te debe servir, espero

Saludos,
Antonio Galicia

Eram quod es, eris quod sum
--

Loading...