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… εσύ πες το).
🖥️ Δείγμα

📦 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 (απαιτεί
npmpackage)
πείτε να το επεκτείνω για επόμενη έκδοση. 😘
EDIT: Σημειώσεις :
- Κάποια πακέτα πιθανά να έχουν μικρή διακύμανση ονόματος ανά distro (π.χ.
ImageMagickvsimagemagick). - Καλύτερα να κάνετε πρώτα backup τις εικόνες σας πριν τη χρήση του.
- Αν έχετε πολύ μεγάλες εικόνες, το script μπορεί να πάρει χρόνo.