Tengo 3 millones de archivos JPG almacenados en un servidor Linux CentOS 6.
Quiero cambiar la calidad al tamaño de archivo% 50 sobre 1 megabyte. Escribí este comando pero recibí el error "lista de argumentos demasiado larga":
$ find -type f -name "*..jpg" -size +1M | xargs mogrify -quality 50 *.jpg
bash: /usr/bin/xargs: Argument list too long
¿Cómo puedo cambiar la calidad de millones de archivos?

*.jpgaxargs? Obtendrá los archivos defind.Respuestas:
xargsadmite un-nargumento para limitar la cantidad de argumentos pasados a lo que llama:Esto lanzará mogrify una vez por imagen. Como mogrify solo puede procesar un archivo a la vez, este es el camino a seguir.
fuente
mogrifyLa documentación muestra ejemplos con*.jpg.Cuando use
findyxargs, no necesita nombrar los archivosxargs. Obtendrá la lista de archivos defind:-n100procesará las imágenes por 100s.-print0y-0hará que la tubería funcione incluso si los nombres de archivo contienen espacios en blanco.También puede llamar
mogrifydirectamente desde find, idealmente si admite el+final deexec:fuente
findaxargsconfind ... -print0 | xargs -0.findpuedo hacerlo todo . : D En lugar de terminar el comando -exec con+, también se puede terminar con;. Esto ejecuta el comando una vez por resultado. ¡No te olvides de escapar;!;terminar+en este caso?findya podría evitar eso, quién sabe. También es adecuado para comandos que no aceptan entrada por lotes.xargsyfind, de hecho, soy lo suficientemente inteligente como para dividir la colección de argumentos automáticamente.Una solución multiplataforma con Python + convert: convertirá todos los archivos PDF del directorio actual en archivos PNG (puede cambiar a JPG si lo prefiere) multiproceso.
Esto requiere que se instalen Imagemagick y Ghostscript . Funciona en Linux / Mac OS X / Microsoft Windows.
Si prefiere agregar el nombre de archivo en cada imagen, puede reemplazar el comando
convert_to_png()por:(Ver -anotar documentación)
fuente
Como se mencionó en SO , también podría hacer:
fuente