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?
*.jpg
axargs
? Obtendrá los archivos defind
.Respuestas:
xargs
admite un-n
argumento 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
mogrify
La documentación muestra ejemplos con*.jpg
.Cuando use
find
yxargs
, no necesita nombrar los archivosxargs
. Obtendrá la lista de archivos defind
:-n100
procesará las imágenes por 100s.-print0
y-0
hará que la tubería funcione incluso si los nombres de archivo contienen espacios en blanco.También puede llamar
mogrify
directamente desde find, idealmente si admite el+
final deexec
:fuente
find
axargs
confind ... -print0 | xargs -0
.find
puedo 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?find
ya podría evitar eso, quién sabe. También es adecuado para comandos que no aceptan entrada por lotes.xargs
yfind
, 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