Cómo comprimir 3000 imágenes en lotes de 50

Cómo comprimir 3000 imágenes en lotes de 50

Tengo una carpeta con más de 3000 imágenes, quiero comprimir 50 de ellas individualmente y almacenarlas en archivos tar.

Las imágenes no tienen nombre en serie.

¿Cómo utilizar la escritura de un script bash que haga este trabajo?

Respuesta1

Supongamos que sus imágenes están almacenadas en ~/Pictureslo que es una abreviatura de /home/USER_ID/Pictures. Coloque los siguientes comandos en su directorio personal en un archivo de script llamado CompressImages. Haga que el archivo sea ejecutable usando:

chmod a+x ~/CompressImages

Llame al script usando:

~/CompressImages

Copie el siguiente script en el archivo ~/CompressImages:

#!/bin/bash

# Where to store Tars? We don't want in Images directory
COMPRESSED_DIR="$HOME/Downloads"
# TARs created with name below + "_999.tar"
TAR_NAME="CompressedImages"
# Directory Images are located in
FILES="$HOME/Pictures/*"

FileCount=50     # Number of files compressed into one Tar
TarCount=0       # Count of Tars created

i=0
for f in $FILES
do
    if [[ $(( i % FileCount )) -eq 0 ]] ; then
        let TarCount++
        TarName="$COMPRESSED_DIR/$TAR_NAME$TarCount.tar"
        tar -cvpf "$TarName" "$f"   # create .tar & add first file
    else
        tar -rvpf "$TarName" "$f"   # Add to existing tar
    fi
    let i++
done

Después de ejecutar CompressImagesel script, verifique los resultados:

$ ll -h ~/Downloads/*.tar

-rw-rw-r-- 1 rick rick  14M Jun 18 16:55 Downloads/CompressedImages10.tar
-rw-rw-r-- 1 rick rick  48M Jun 18 16:55 Downloads/CompressedImages11.tar
-rw-rw-r-- 1 rick rick  16M Jun 18 16:55 Downloads/CompressedImages12.tar
-rw-rw-r-- 1 rick rick  55M Jun 18 16:55 Downloads/CompressedImages13.tar
-rw-rw-r-- 1 rick rick  45M Jun 18 16:55 Downloads/CompressedImages14.tar
-rw-rw-r-- 1 rick rick  43M Jun 18 16:55 Downloads/CompressedImages15.tar
-rw-rw-r-- 1 rick rick  37M Jun 18 16:55 Downloads/CompressedImages16.tar
-rw-rw-r-- 1 rick rick  38M Jun 18 16:55 Downloads/CompressedImages17.tar
-rw-rw-r-- 1 rick rick  44M Jun 18 16:55 Downloads/CompressedImages18.tar
-rw-rw-r-- 1 rick rick  47M Jun 18 16:55 Downloads/CompressedImages19.tar
-rw-rw-r-- 1 rick rick 180M Jun 18 16:55 Downloads/CompressedImages1.tar
-rw-rw-r-- 1 rick rick  53M Jun 18 16:55 Downloads/CompressedImages20.tar
-rw-rw-r-- 1 rick rick  33M Jun 18 16:55 Downloads/CompressedImages21.tar
-rw-rw-r-- 1 rick rick  13M Jun 18 16:55 Downloads/CompressedImages22.tar
-rw-rw-r-- 1 rick rick  26M Jun 18 16:55 Downloads/CompressedImages23.tar
-rw-rw-r-- 1 rick rick 1.4M Jun 18 16:55 Downloads/CompressedImages24.tar
-rw-rw-r-- 1 rick rick  13M Jun 18 16:55 Downloads/CompressedImages2.tar
-rw-rw-r-- 1 rick rick  15M Jun 18 16:55 Downloads/CompressedImages3.tar
-rw-rw-r-- 1 rick rick  23M Jun 18 16:55 Downloads/CompressedImages4.tar
-rw-rw-r-- 1 rick rick  11M Jun 18 16:55 Downloads/CompressedImages5.tar
-rw-rw-r-- 1 rick rick  12M Jun 18 16:55 Downloads/CompressedImages6.tar
-rw-rw-r-- 1 rick rick  20M Jun 18 16:55 Downloads/CompressedImages7.tar
-rw-rw-r-- 1 rick rick 7.4M Jun 18 16:55 Downloads/CompressedImages8.tar
-rw-rw-r-- 1 rick rick  21M Jun 18 16:55 Downloads/CompressedImages9.tar

Respuesta2

Puedes hacerlo usando parallel -l 50:

cd /path/to/images

find . -maxdepth 1 -type f -print0 \
| parallel -0 -l 50 -j 1 tar cvpzf {#}.tar.gz {}

Agregue -iname "*.jpg"o similar al comando de búsqueda si también hay otros archivos.

Omita zla opción de tary asígnele un nombre .taren lugar de tar.gzsi sus imágenes ya están comprimidas (como sería el caso, por ejemplo jpg).

Explicación:

  • find -print0envía datos delimitados por nulos
  • parallel -0lee datos delimitados por nulos
  • -l 50leer 50 líneas para cada ejecución
  • -j 1ejecuta una tarea en paralelo, puede cambiarla a la que funcione mejor para usted (depende de cuántos subprocesos de CPU tenga y de qué tan rápida sea su E/S).
  • {#}será reemplazado por el número de secuencia (0-n)
  • {}será reemplazado por los 50 nombres de archivos.

Luego puedes mover/renombrar *.tar.gzo *.tara tu gusto.

Esto será mucho más rápido que solicitar tarcada archivo y agregarlo a un tar existente.

información relacionada