{"id":886,"date":"2025-09-15T15:31:46","date_gmt":"2025-09-15T12:31:46","guid":{"rendered":"https:\/\/greenhouse.cv.ua\/?p=886"},"modified":"2025-09-15T15:48:23","modified_gmt":"2025-09-15T12:48:23","slug":"%d0%b7%d0%bc%d0%b5%d0%bd%d1%88%d0%b5%d0%bd%d0%bd%d1%8f-%d1%80%d0%be%d0%b7%d0%bc%d1%96%d1%80%d1%83-%d1%84%d0%b0%d0%b9%d0%bb%d1%96%d0%b2-%d1%96%d0%b7-%d0%b7%d0%be%d0%b1%d1%80%d0%b0%d0%b6%d0%b5%d0%bd","status":"publish","type":"post","link":"https:\/\/greenhouse.cv.ua\/?p=886","title":{"rendered":"\u0417\u043c\u0435\u043d\u0448\u0435\u043d\u043d\u044f \u0440\u043e\u0437\u043c\u0456\u0440\u0443 \u0444\u0430\u0439\u043b\u0456\u0432 \u0456\u0437 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f\u043c\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0456 Linux"},"content":{"rendered":"\n<p>\u0417\u043c\u0435\u043d\u0448\u0435\u043d\u043d\u044f \u0440\u043e\u0437\u043c\u0456\u0440\u0443 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c (\u0441\u0442\u0438\u0441\u043d\u0435\u043d\u043d\u044f \u0431\u0435\u0437 \u0437\u043d\u0430\u0447\u043d\u043e\u0457 \u0432\u0442\u0440\u0430\u0442\u0438 \u044f\u043a\u043e\u0441\u0442\u0456) \u043c\u043e\u0436\u043d\u0430 \u0432\u0438\u043a\u043e\u043d\u0430\u0442\u0438 \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0433\u043e \u0440\u044f\u0434\u043a\u0430 Linux. \u041d\u0430\u0439\u043f\u043e\u0448\u0438\u0440\u0435\u043d\u0456\u0448\u0456 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438 \u2014 \u0446\u0435 <strong>ImageMagick<\/strong> (\u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0438\u0439), <strong>jpegoptim<\/strong> (\u0434\u043b\u044f JPEG), <strong>optipng<\/strong> (\u0434\u043b\u044f PNG) \u0442\u0430 <strong>pngcrush<\/strong> (\u0434\u043b\u044f PNG). \u0412\u043e\u043d\u0438 \u043f\u0440\u0430\u0446\u044e\u044e\u0442\u044c \u0431\u0435\u0437 GUI \u0456 \u0435\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0437\u043c\u0435\u043d\u0448\u0443\u044e\u0442\u044c \u0440\u043e\u0437\u043c\u0456\u0440 \u0444\u0430\u0439\u043b\u0456\u0432.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u041a\u0440\u043e\u043a 1: \u0412\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0456\u0432<\/h4>\n\n\n\n<p>\u0412\u0441\u0442\u0430\u043d\u043e\u0432\u0456\u0442\u044c \u043f\u0430\u043a\u0435\u0442\u0438 \u0437\u0430\u043b\u0435\u0436\u043d\u043e \u0432\u0456\u0434 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 (\u043d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, Ubuntu\/Debian):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt install imagemagick jpegoptim optipng pngcrush<\/code><\/pre>\n\n\n\n<p>\u0414\u043b\u044f Fedora\/RHEL:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo dnf install ImageMagick jpegoptim optipng pngcrush<\/code><\/pre>\n\n\n\n<p>\u0414\u043b\u044f Arch:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo pacman -S imagemagick jpegoptim optipng pngcrush<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u041a\u0440\u043e\u043a 2: \u041e\u0441\u043d\u043e\u0432\u043d\u0456 \u043a\u043e\u043c\u0430\u043d\u0434\u0438 \u0434\u043b\u044f \u0441\u0442\u0438\u0441\u043d\u0435\u043d\u043d\u044f<\/h4>\n\n\n\n<p>\u041e\u0441\u044c \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u0438 \u0434\u043b\u044f \u0440\u0456\u0437\u043d\u0438\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0456\u0432. \u0417\u0430\u043c\u0456\u043d\u0456\u0442\u044c <code>image.jpg<\/code> \u043d\u0430 \u0448\u043b\u044f\u0445 \u0434\u043e \u0432\u0430\u0448\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0443. \u041a\u043e\u043c\u0430\u043d\u0434\u0438 \u0441\u0442\u0432\u043e\u0440\u044e\u044e\u0442\u044c \u043d\u043e\u0432\u0456 \u0444\u0430\u0439\u043b\u0438 (\u0449\u043e\u0431 \u043d\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0443\u0432\u0430\u0442\u0438 \u043e\u0440\u0438\u0433\u0456\u043d\u0430\u043b\u0438); \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0443 \u0434\u043e\u0434\u0430\u0439\u0442\u0435 <code>-o<\/code> \u0430\u0431\u043e <code>-overwrite<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u0424\u043e\u0440\u043c\u0430\u0442<\/th><th>\u0406\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442<\/th><th>\u041a\u043e\u043c\u0430\u043d\u0434\u0430<\/th><th>\u041e\u043f\u0438\u0441<\/th><th>\u041e\u0447\u0456\u043a\u0443\u0432\u0430\u043d\u0435 \u0437\u043c\u0435\u043d\u0448\u0435\u043d\u043d\u044f<\/th><\/tr><\/thead><tbody><tr><td><strong>JPEG<\/strong><\/td><td>jpegoptim<\/td><td><code>jpegoptim --max=80 image.jpg<\/code><\/td><td>\u0421\u0442\u0438\u0441\u043a\u0430\u0454 \u0437 \u044f\u043a\u0456\u0441\u0442\u044e 80% (\u0431\u0430\u043b\u0430\u043d\u0441 \u0440\u043e\u0437\u043c\u0456\u0440\/\u044f\u043a\u0456\u0441\u0442\u044c). <code>--strip-all<\/code> \u0432\u0438\u0434\u0430\u043b\u044f\u0454 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u0456.<\/td><td>20\u201350%<\/td><\/tr><tr><td><strong>JPEG<\/strong><\/td><td>ImageMagick (convert)<\/td><td><code>convert image.jpg -quality 80 optimized.jpg<\/code><\/td><td>\u0417\u043c\u0456\u043d\u044e\u0454 \u044f\u043a\u0456\u0441\u0442\u044c; \u0434\u043e\u0434\u0430\u0439\u0442\u0435 <code>-strip<\/code> \u0434\u043b\u044f \u0432\u0438\u0434\u0430\u043b\u0435\u043d\u043d\u044f \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u0438\u0445.<\/td><td>30\u201360%<\/td><\/tr><tr><td><strong>PNG<\/strong><\/td><td>optipng<\/td><td><code>optipng -o7 image.png<\/code><\/td><td>\u041e\u043f\u0442\u0438\u043c\u0456\u0437\u0430\u0446\u0456\u044f \u0440\u0456\u0432\u043d\u044f 7 (\u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c); \u0431\u0435\u0437 \u0432\u0442\u0440\u0430\u0442.<\/td><td>10\u201340%<\/td><\/tr><tr><td><strong>PNG<\/strong><\/td><td>pngcrush<\/td><td><code>pngcrush -rem alla -reduce -brute image.png<\/code><\/td><td>\u0411\u0440\u0443\u0442\u0444\u043e\u0440\u0441-\u043e\u043f\u0442\u0438\u043c\u0456\u0437\u0430\u0446\u0456\u044f; <code>-rem alla<\/code> \u0432\u0438\u0434\u0430\u043b\u044f\u0454 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u0456.<\/td><td>20\u201350%<\/td><\/tr><tr><td><strong>\u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0438\u0439<\/strong> (JPEG\/PNG\/GIF)<\/td><td>ImageMagick (mogrify)<\/td><td><code>mogrify -quality 80 -strip *.jpg<\/code><\/td><td>\u041e\u0431\u0440\u043e\u0431\u043b\u044f\u0454 \u0432\u0441\u0456 JPEG \u0443 \u043f\u0430\u043f\u0446\u0456; <code>mogrify<\/code> \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0443\u0454 \u0444\u0430\u0439\u043b\u0438 (\u043e\u0431\u0435\u0440\u0435\u0436\u043d\u043e!).<\/td><td>\u0417\u0430\u043b\u0435\u0436\u0438\u0442\u044c \u0432\u0456\u0434 \u0444\u043e\u0440\u043c\u0430\u0442\u0443<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u041f\u043e\u044f\u0441\u043d\u0435\u043d\u043d\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0456\u0432<\/strong>:<\/li>\n\n\n\n<li><code>--max=80<\/code> \u0430\u0431\u043e <code>-quality 80<\/code>: \u042f\u043a\u0456\u0441\u0442\u044c 80% (\u0432\u0456\u0434 0 \u0434\u043e 100; \u043d\u0438\u0436\u0447\u0435 \u2014 \u043c\u0435\u043d\u0448\u0438\u0439 \u0440\u043e\u0437\u043c\u0456\u0440, \u0430\u043b\u0435 \u0433\u0456\u0440\u0448\u0430 \u044f\u043a\u0456\u0441\u0442\u044c).<\/li>\n\n\n\n<li><code>-o7<\/code>: \u0420\u0456\u0432\u0435\u043d\u044c \u043e\u043f\u0442\u0438\u043c\u0456\u0437\u0430\u0446\u0456\u0457 (1\u20137; \u0432\u0438\u0449\u0438\u0439 \u2014 \u043f\u043e\u0432\u0456\u043b\u044c\u043d\u0456\u0448\u0438\u0439, \u0430\u043b\u0435 \u043a\u0440\u0430\u0449\u0438\u0439).<\/li>\n\n\n\n<li><code>-strip<\/code>: \u0412\u0438\u0434\u0430\u043b\u044f\u0454 EXIF, \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u0456 \u0442\u043e\u0449\u043e, \u0449\u043e \u0437\u0430\u043e\u0449\u0430\u0434\u0436\u0443\u0454 5\u201320% \u0440\u043e\u0437\u043c\u0456\u0440\u0443.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\u041a\u0440\u043e\u043a 3: \u041e\u0431\u0440\u043e\u0431\u043a\u0430 \u043a\u0456\u043b\u044c\u043a\u043e\u0445 \u0444\u0430\u0439\u043b\u0456\u0432<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0423\u0441\u0456 JPEG \u0443 \u043f\u0430\u043f\u0446\u0456: <code>jpegoptim --batch --max=80 *.jpg<\/code><\/li>\n\n\n\n<li>\u0423\u0441\u0456 PNG: <code>optipng -o7 *.png<\/code><\/li>\n\n\n\n<li>\u0420\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e (\u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0447\u0438 \u043f\u0456\u0434\u043f\u0430\u043f\u043a\u0438): <code>find . -name \"*.jpg\" -exec jpegoptim --max=80 {} \\;<\/code><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\u041a\u0440\u043e\u043a 4: \u041f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>ls -lh *.jpg  # \u041f\u043e\u043a\u0430\u0437\u0443\u0454 \u0440\u043e\u0437\u043c\u0456\u0440 \u0444\u0430\u0439\u043b\u0456\u0432 \u0443 \u043b\u044e\u0434\u0441\u044c\u043a\u043e\u043c\u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0456<\/code><\/pre>\n\n\n\n<p>\u041f\u0440\u0438\u043a\u043b\u0430\u0434: \u041e\u0440\u0438\u0433\u0456\u043d\u0430\u043b 2MB \u2192 \u043f\u0456\u0441\u043b\u044f \u0441\u0442\u0438\u0441\u043d\u0435\u043d\u043d\u044f 800KB.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u041f\u043e\u0440\u0430\u0434\u0438<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0411\u0435\u0437 \u0432\u0442\u0440\u0430\u0442<\/strong>: \u0414\u043b\u044f JPEG \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 <code>jpegoptim<\/code> \u0437 <code>--strip-only<\/code> (\u0442\u0456\u043b\u044c\u043a\u0438 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u0456). \u0414\u043b\u044f PNG \u2014 <code>optipng<\/code> \u0430\u0431\u043e <code>pngcrush<\/code> \u0437\u0430\u0432\u0436\u0434\u0438 \u0431\u0435\u0437 \u0432\u0442\u0440\u0430\u0442.<\/li>\n\n\n\n<li><strong>\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0443\u0432\u0430\u043d\u043d\u044f<\/strong>: \u042f\u043a\u0449\u043e \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0437\u043c\u0435\u043d\u0448\u0438\u0442\u0438 \u0440\u043e\u0437\u0434\u0456\u043b\u044c\u043d\u0443 \u0437\u0434\u0430\u0442\u043d\u0456\u0441\u0442\u044c (\u043d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, \u0432\u0434\u0432\u0456\u0447\u0456): <code>convert image.jpg -resize 50% -quality 80 thumb.jpg<\/code>.<\/li>\n\n\n\n<li><strong>\u041e\u0431\u043c\u0435\u0436\u0435\u043d\u043d\u044f<\/strong>: ImageMagick \u043c\u043e\u0436\u0435 \u0431\u0443\u0442\u0438 \u043f\u043e\u0432\u0456\u043b\u044c\u043d\u0438\u043c \u0434\u043b\u044f \u0432\u0435\u043b\u0438\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u0456\u0432; jpegoptim \u0448\u0432\u0438\u0434\u0448\u0438\u0439 \u0434\u043b\u044f JPEG.<\/li>\n\n\n\n<li>\u042f\u043a\u0449\u043e \u0444\u0430\u0439\u043b\u0438 \u0432 ZIP\/RAR: \u0420\u043e\u0437\u043f\u0430\u043a\u0443\u0439\u0442\u0435 \u0441\u043f\u043e\u0447\u0430\u0442\u043a\u0443, \u0441\u0442\u0438\u0441\u043d\u0456\u0442\u044c \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f, \u0437\u0430\u043f\u0430\u043a\u0443\u0439\u0442\u0435 \u0437\u0430\u043d\u043e\u0432\u043e \u0437 <code>zip -9 archive.zip<\/code>.<\/li>\n<\/ul>\n\n\n\n<p>\u0426\u0456 \u043c\u0435\u0442\u043e\u0434\u0438 \u043f\u0440\u0430\u0446\u044e\u044e\u0442\u044c \u043d\u0430 \u0431\u0443\u0434\u044c-\u044f\u043a\u0456\u0439 \u0441\u0443\u0447\u0430\u0441\u043d\u0456\u0439 Linux (\u0432\u043a\u043b\u044e\u0447\u043d\u043e \u0437 2025 \u0440\u043e\u043a\u043e\u043c).<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0421\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0456\u0437\u0430\u0446\u0456\u0457 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c \u0443 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430\u0445<\/h3>\n\n\n\n<p>\u041e\u0441\u044c \u043f\u0440\u043e\u0441\u0442\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 Bash, \u044f\u043a\u0438\u0439 \u0447\u0438\u0442\u0430\u0454 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0456\u0432 \u0437 \u0444\u0430\u0439\u043b\u0443 (\u043d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, <code>directories.txt<\/code>), \u0437\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u0443 \u043d\u0438\u0445 \u0444\u0430\u0439\u043b\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c (JPEG, PNG, GIF) \u0456 \u043e\u043f\u0442\u0438\u043c\u0456\u0437\u0443\u0454 \u0457\u0445 \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0456\u0432 <code>jpegoptim<\/code>, <code>optipng<\/code> \u0442\u0430 <code>convert<\/code> \u0437 ImageMagick. \u0421\u043a\u0440\u0438\u043f\u0442 \u0441\u0442\u0432\u043e\u0440\u044e\u0454 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u0456 \u043a\u043e\u043f\u0456\u0457 \u043e\u0440\u0438\u0433\u0456\u043d\u0430\u043b\u0456\u0432 \u0443 \u043f\u0456\u0434\u043f\u0430\u043f\u0446\u0456 <code>backup<\/code> \u043a\u043e\u0436\u043d\u043e\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443, \u0449\u043e\u0431 \u0443\u043d\u0438\u043a\u043d\u0443\u0442\u0438 \u0432\u0442\u0440\u0430\u0442.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">\u041f\u0435\u0440\u0435\u0434\u0443\u043c\u043e\u0432\u0438<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0412\u0441\u0442\u0430\u043d\u043e\u0432\u0456\u0442\u044c \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438: <code>sudo apt install jpegoptim optipng imagemagick<\/code> (\u0434\u043b\u044f Ubuntu).<\/li>\n\n\n\n<li>\u0421\u0442\u0432\u043e\u0440\u0456\u0442\u044c \u0444\u0430\u0439\u043b <code>directories.txt<\/code> \u0437 \u043f\u0435\u0440\u0435\u043b\u0456\u043a\u043e\u043c \u0448\u043b\u044f\u0445\u0456\u0432 \u0434\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0456\u0432, \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043d\u0430 \u0440\u044f\u0434\u043e\u043a (\u043d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434, <code>\/path\/to\/dir1\\n\/path\/to\/dir2<\/code>).<\/li>\n\n\n\n<li>\u0417\u0430\u043f\u0443\u0441\u0442\u0456\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442: <code>.\/optimize_images.sh directories.txt<\/code> (\u0437\u0440\u043e\u0431\u0456\u0442\u044c \u0439\u043e\u0433\u043e \u0432\u0438\u043a\u043e\u043d\u0443\u0432\u0430\u043d\u0438\u043c: <code>chmod +x optimize_images.sh<\/code>).<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">\u0421\u043a\u0440\u0438\u043f\u0442: <code>optimize_images.sh<\/code><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\n\n# \u041f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0456\u0432\nif &#91; $# -ne 1 ]; then\n    echo \"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f: $0 &lt;\u0444\u0430\u0439\u043b_\u0437\u0456_\u0441\u043f\u0438\u0441\u043a\u043e\u043c_\u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0456\u0432&gt;\"\n    exit 1\nfi\n\nLIST_FILE=\"$1\"\n\n# \u041f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0430 \u0456\u0441\u043d\u0443\u0432\u0430\u043d\u043d\u044f \u0444\u0430\u0439\u043b\u0443 \u0441\u043f\u0438\u0441\u043a\u0443\nif &#91; ! -f \"$LIST_FILE\" ]; then\n    echo \"\u0424\u0430\u0439\u043b $LIST_FILE \u043d\u0435 \u0456\u0441\u043d\u0443\u0454!\"\n    exit 1\nfi\n\n# \u0424\u0443\u043d\u043a\u0446\u0456\u044f \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0456\u0437\u0430\u0446\u0456\u0457 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f\noptimize_image() {\n    local file=\"$1\"\n    local ext=\"${file##*.}\"\n    local backup_dir=\"$(dirname \"$file\")\/backup\"\n    mkdir -p \"$backup_dir\"\n    cp \"$file\" \"$backup_dir\/\"  # \u0420\u0435\u0437\u0435\u0440\u0432\u043d\u0430 \u043a\u043e\u043f\u0456\u044f\n\n    case \"$ext\" in\n        jpg|jpeg|JPG|JPEG)\n            jpegoptim --max=80 --strip-all \"$file\"\n            ;;\n        png|PNG)\n            optipng -o7 -strip all \"$file\"\n            ;;\n        gif|GIF)\n            convert \"$file\" -strip -quality 80 \"$file\"\n            ;;\n        *)\n            echo \"\u041d\u0435\u043f\u0456\u0434\u0442\u0440\u0438\u043c\u0443\u0432\u0430\u043d\u0438\u0439 \u0444\u043e\u0440\u043c\u0430\u0442: $file\"\n            ;;\n    esac\n}\n\n# \u0427\u0438\u0442\u0430\u043d\u043d\u044f \u0441\u043f\u0438\u0441\u043a\u0443 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0456\u0432 \u0456 \u043e\u0431\u0440\u043e\u0431\u043a\u0430\nwhile IFS= read -r dir; do\n    if &#91; -d \"$dir\" ]; then\n        echo \"\u041e\u0431\u0440\u043e\u0431\u043a\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0443: $dir\"\n        find \"$dir\" -type f \\( -name \"*.jpg\" -o -name \"*.jpeg\" -o -name \"*.png\" -o -name \"*.gif\" \\) | while read -r image; do\n            optimize_image \"$image\"\n            echo \"\u041e\u043f\u0442\u0438\u043c\u0456\u0437\u043e\u0432\u0430\u043d\u043e: $image\"\n        done\n    else\n        echo \"\u041a\u0430\u0442\u0430\u043b\u043e\u0433 $dir \u043d\u0435 \u0456\u0441\u043d\u0443\u0454!\"\n    fi\ndone &lt; \"$LIST_FILE\"\n\necho \"\u041e\u043f\u0442\u0438\u043c\u0456\u0437\u0430\u0446\u0456\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430!\"<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u042f\u043a \u0446\u0435 \u043f\u0440\u0430\u0446\u044e\u0454<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u0427\u0438\u0442\u0430\u043d\u043d\u044f \u0441\u043f\u0438\u0441\u043a\u0443<\/strong>: \u0421\u043a\u0440\u0438\u043f\u0442 \u0447\u0438\u0442\u0430\u0454 \u0444\u0430\u0439\u043b \u0437 \u0448\u043b\u044f\u0445\u0430\u043c\u0438 \u0434\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0456\u0432.<\/li>\n\n\n\n<li><strong>\u041f\u043e\u0448\u0443\u043a \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c<\/strong>: \u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454 <code>find<\/code> \u0434\u043b\u044f \u043f\u043e\u0448\u0443\u043a\u0443 \u0444\u0430\u0439\u043b\u0456\u0432 \u0437 \u0440\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u043d\u044f\u043c\u0438 .jpg, .jpeg, .png, .gif (\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e).<\/li>\n\n\n\n<li><strong>\u041e\u043f\u0442\u0438\u043c\u0456\u0437\u0430\u0446\u0456\u044f<\/strong>:<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>JPEG: \u0417\u043c\u0435\u043d\u0448\u0443\u0454 \u0434\u043e 80% \u044f\u043a\u043e\u0441\u0442\u0456, \u0432\u0438\u0434\u0430\u043b\u044f\u0454 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u0456.<\/li>\n\n\n\n<li>PNG: \u0411\u0435\u0437\u0432\u0442\u0440\u0430\u0442\u043d\u0430 \u043e\u043f\u0442\u0438\u043c\u0456\u0437\u0430\u0446\u0456\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0456\u0432\u043d\u044f.<\/li>\n\n\n\n<li>GIF: \u0417\u043c\u0435\u043d\u0448\u0443\u0454 \u044f\u043a\u0456\u0441\u0442\u044c \u0434\u043e 80% \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e ImageMagick.<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u0420\u0435\u0437\u0435\u0440\u0432\u043d\u0456 \u043a\u043e\u043f\u0456\u0457<\/strong>: \u041a\u043e\u043f\u0456\u044e\u0454 \u043e\u0440\u0438\u0433\u0456\u043d\u0430\u043b\u0438 \u0432 <code>backup<\/code> \u043f\u0456\u0434\u043f\u0430\u043f\u043a\u0443.<\/li>\n\n\n\n<li><strong>\u041b\u043e\u0433\u0438<\/strong>: \u0412\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0435\u0441 \u0443 \u043a\u043e\u043d\u0441\u043e\u043b\u044c.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">\u041f\u0440\u0438\u043a\u043b\u0430\u0434 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0424\u0430\u0439\u043b <code>directories.txt<\/code>:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>  \/home\/user\/images\/dir1\n  \/home\/user\/images\/dir2<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0417\u0430\u043f\u0443\u0441\u043a: <code>.\/optimize_images.sh directories.txt<\/code><\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0417\u043c\u0435\u043d\u0448\u0435\u043d\u043d\u044f \u0440\u043e\u0437\u043c\u0456\u0440\u0443 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c (\u0441\u0442\u0438\u0441\u043d\u0435\u043d\u043d\u044f \u0431\u0435\u0437 \u0437\u043d\u0430\u0447\u043d\u043e\u0457 \u0432\u0442\u0440\u0430\u0442\u0438 \u044f\u043a\u043e\u0441\u0442\u0456) \u043c\u043e\u0436\u043d\u0430 \u0432\u0438\u043a\u043e\u043d\u0430\u0442\u0438 \u0437\u0430 \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u043e\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0433\u043e \u0440\u044f\u0434\u043a\u0430 Linux. \u041d\u0430\u0439\u043f\u043e\u0448\u0438\u0440\u0435\u043d\u0456\u0448\u0456 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438 \u2014 \u0446\u0435 ImageMagick (\u0443\u043d\u0456\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0438\u0439), jpegoptim (\u0434\u043b\u044f JPEG), optipng . . .<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[23,7],"tags":[],"class_list":["post-886","post","type-post","status-publish","format-standard","hentry","category-it","category-linux"],"aioseo_notices":[],"featured_image_src":null,"author_info":{"display_name":"Bernyk Dmytro","author_link":"https:\/\/greenhouse.cv.ua\/?author=2"},"_links":{"self":[{"href":"https:\/\/greenhouse.cv.ua\/index.php?rest_route=\/wp\/v2\/posts\/886","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/greenhouse.cv.ua\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/greenhouse.cv.ua\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/greenhouse.cv.ua\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/greenhouse.cv.ua\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=886"}],"version-history":[{"count":3,"href":"https:\/\/greenhouse.cv.ua\/index.php?rest_route=\/wp\/v2\/posts\/886\/revisions"}],"predecessor-version":[{"id":891,"href":"https:\/\/greenhouse.cv.ua\/index.php?rest_route=\/wp\/v2\/posts\/886\/revisions\/891"}],"wp:attachment":[{"href":"https:\/\/greenhouse.cv.ua\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=886"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/greenhouse.cv.ua\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=886"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/greenhouse.cv.ua\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=886"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}