lefteros_by SomniusX
EN ↗Πες ένα γεια

19 Νοεμβρίου 2025 / Lefteris Iliadis (SomniusX)

Lossless Συμπίεση σε png jpg webp με ένα απλό Script

Έφτιαξα έναν μικρό οδηγό που λύνει ένα κλασικό θέμα: πώς συμπιέζουμε μαζικά PNG / JPG / WEBP εικόνες από έναν φάκελο μαζί με τα subfolders – lossless και χωρίς να αλλάξει η ποιότητ

Έφτιαξα έναν μικρό οδηγό που λύνει ένα κλασικό θέμα: πώς συμπιέζουμε μαζικά PNG / JPG / WEBP εικόνες από έναν φάκελο μαζί με τα subfolders – lossless και χωρίς να αλλάξει η ποιότητα.

Όλα αυτά με ένα απλό bash script που τρέχει σε οποιοδήποτε Linux distro. Και ναι, στο τέλος βάζουμε και alias για το shell της επιλογής σας (bash / zsh / fish).

  • Ο παρακάτω οδηγός έχει υποβοηθηθεί από LLM εργαλείο για ευκολότερη διατύπωση, και έχει γίνει proofread και εμπλουτισμός από εμένα.

🚀 Τι πετυχαίνουμε;

  • Συμπίεση όλων των PNG/JPG/WEBP, recursive, με ένα command.

  • Lossless, δηλαδή ίδια ποιότητα, απλά μικρότερα αρχεία.

  • Το script είναι 100% ασφαλές: δεν χαλάει εικόνες.

  • Δουλεύει σε όλα τα Linux distros (Fedora, Arch, Debian, Ubuntu, openSUSE, Void, Gentoo, Alpine… εσύ πες το).

🖥️ Δείγμα

image


📦 1. Εγκατάσταση των εργαλείων (ανά distro)

Ανάλογα το Linux που χρησιμοποιείς:

Fedora / Nobara / RHEL / Alma / Rocky

sudo dnf install ImageMagick oxipng jpegoptim libwebp-tools

Arch / Manjaro / Endeavour / CachyOS / Garuda

sudo pacman -S imagemagick oxipng jpegoptim libwebp

Debian / Ubuntu / Mint

sudo apt install imagemagick oxipng jpegoptim webp

openSUSE

sudo zypper install ImageMagick oxipng jpegoptim libwebp-tools

Void Linux

sudo xbps-install -S ImageMagick oxipng jpegoptim libwebp

Gentoo

sudo emerge --ask media-gfx/imagemagick media-gfx/oxipng media-gfx/jpegoptim media-libs/libwebp

(Αν κάποιος θέλει οδηγίες για Alpine, NixOS κ.λπ. πείτε.)


🧰 2. Δημιουργία του script

Φτιάξτε ένα αρχείο:

nano lossless_compress.sh

Βάλτε μέσα αυτό:

#!/bin/bash
set -e

TARGET_DIR="${1:-.}"

echo "Scanning directory: $TARGET_DIR"

find "$TARGET_DIR" -type f \( -iname "*.png" -o -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.webp" \) | while read -r file; do
    ext="${file##*.}"
    ext="${ext,,}"

    echo "Processing: $file"

    case "$ext" in
        png)
            oxipng -o4 --strip safe "$file"
            ;;
        jpg|jpeg)
            jpegoptim --strip-all --all-progressive "$file"
            ;;
        webp)
            cwebp -lossless "$file" -o "${file}.tmp"
            mv "${file}.tmp" "$file"
            ;;
    esac
done

echo "Done! All images losslessly compressed."

Σώστε → CTRL+O → Enter → CTRL+X.

Κάντε το εκτελέσιμο:

chmod +x lossless_compress.sh

🧪 3. Χρήση

Συμπίεση του τρέχοντος φακέλου:

./lossless_compress.sh

Συμπίεση άλλου φακέλου:

./lossless_compress.sh /path/to/images

⭐ 4. Προσθήκη Alias στο Shell σας (bash / zsh / fish)

Θέλω π.χ. να γράφω απλά:

squeeze

Και να τρέχει.

Οπότε…

Bash

echo 'alias squeeze="bash ~/lossless_compress.sh"' >> ~/.bashrc
source ~/.bashrc

Zsh

echo 'alias squeeze="bash ~/lossless_compress.sh"' >> ~/.zshrc
source ~/.zshrc

Fish

echo 'alias squeeze="bash ~/lossless_compress.sh"' >> ~/.config/fish/config.fish
source ~/.config/fish/config.fish

Αν χρησιμοποιείς κάτι πιο niche (ash, elvish, xonsh, nushell), πες μου το shell name και στο γράφω.


🧨 Παράδειγμα χρήσης με alias

squeeze ~/Pictures

ή απλά:

cd ~/Pictures
squeeze

🔚 Αυτό ήταν!

Ένα μικρό, καθαρό εργαλείο για να κρατάμε τις φωτογραφίες μας optimized για ανέβασμα χωρίς απώλεια ποιότητας.

Αν θέλετε:

  • multi-core parallel compression

  • logging σε txt

  • backup των original εικόνων

  • μόνο-αν-είναι-μικρότερο logic

  • έκδοση για Squoosh CLI (απαιτεί npm package)

πείτε να το επεκτείνω για επόμενη έκδοση. 😘


EDIT: Σημειώσεις :

  1. Κάποια πακέτα πιθανά να έχουν μικρή διακύμανση ονόματος ανά distro (π.χ. ImageMagick vs imagemagick).
  2. Καλύτερα να κάνετε πρώτα backup τις εικόνες σας πριν τη χρήση του.
  3. Αν έχετε πολύ μεγάλες εικόνες, το script μπορεί να πάρει χρόνo.