2012-10-11 52 views
8

tengo fotos en directorios múltiples. Quiero usar jpegtran (herramienta de línea de comandos) a recursivamente pasar por cada uno de ellos, optimizarlo, y guardarlo (sobrescribir)¿Cómo recursivamente usar JpegTran (línea de comando) para optimizar todos los archivos en subdirectorios?

si están todos en una carpeta i utilizar este

for JPEG in *.jpg ; do jpegtran -optimize $JPEG > $JPEG; done 

pero no puede hacerlo funcionar recursivamente y sobrescribiendo el mismo archivo (en lugar de un nuevo nombre de archivo)

¿Algún consejo?

Respuesta

5

Cómo sobre el uso del comando find:

find /your/dir -name '*.jpg' -exec echo jpegtran -optimize {} \; 

ejecutar el comando, si te gusta la salida, retire echo para ejecutarlo.

+0

jpegtran tiene salida por defecto en la salida estándar. –

3

lo general, es mucho más fácil de usar encontrar en estos casos, porque lo que se quiere hacer es acto en unos pocos nombres de archivo. La utilidad find le dará esos nombres. Suponiendo que tiene herramientas GNU (o incluso BSD), el siguiente ejemplo ilustrará este escenario común.

Por ejemplo:

$ find ~/images/wallpapers/TEMP/ -type f -iname '*jpg' \ 
    -exec sh -c 'jpegtran -outfile {}.out -optimize {}; mv {}.out {} ' \; 
  1. encuentran busca todos los archivos en formato JPG en la carpeta TEMP, de forma recursiva.
  2. Para cada camino archivo completo encontrado (denotado por `{} '), encontrar se ejecutará la orden dada a -exec
  3. los tramposos opción -exec y ejecuta varios comandos en lugar de uno a través de sh

Notas

cat file > file no está permitido porque rea de forma simultánea desde y escribir en el mismo archivo no es una operación bien definida o incluso compatible en bash.

22

jpegtran whole directory

find /the/image/path -name "*.jpg" -type f -exec jpegtran -copy none -optimize -outfile {} {} \; 
+0

Oups abajo votado por error –

+0

noooooooooo !!! ;) – Bas

Cuestiones relacionadas