ubuntu 需要转换一个目录与subdirectorys与图像到webp

mzillmmw  于 2023-05-16  发布在  其他
关注(0)|答案(2)|浏览(106)

我试图使我的网站速度更快,发现转换JPG和PNG到WebP可能是一个差异,所以我想复制我的主题目录中的所有图像,包括在不同的文件夹中的子目录,但保持原来的目录流。
在谷歌上搜索后,我在这个网站上找到了一个脚本,它工作,我在一个新的开始文件夹中使用mkdir目录流。但我的问题是我必须手动编辑脚本并在每个文件夹中运行它。因为我不是最好的工作与bash我不知道如何编辑转换脚本寻找在所有文件夹和复制他们在新的。
所以我的问题是,是否有一种方法可以保持文件夹结构与原始文件夹相同,但使用不同的基础文件夹?

for file in *.jpg
do
    cwebp -q 100 "$file" -o "/var/www/themes/assets/images/webp/${file%.jpg}.webp"
done
laik7k3q

laik7k3q1#

试试这个(Shellcheck-clean)代码:

#! /bin/bash

shopt -s nullglob       # Globs that match nothing expand to nothing
shopt -s globstar       # ** matches multiple directory levels

root_webp_dir=/var/www/themes/assets/images/webp

for jpg_path in **/*.jpg ; do
    jpg_file=${jpg_path##*/}
    [[ $jpg_path == */* ]] && jpg_dir=${jpg_path%/*} || jpg_dir=.

    webp_dir=${root_webp_dir}/${jpg_dir}
    webp_path=${webp_dir}/${jpg_file%.jpg}.webp

    [[ -d $webp_dir ]] || mkdir -p -- "$webp_dir"
    cwebp -q 100 "$jpg_path" -o "$webp_path"
done

请注意,我用于测试的cwebp版本(愚蠢地)不支持--终止命令行选项的约定。否则,该命令将是(并且应该是)cwebp -q 100 -o "$webp_path" -- "$jpg_path"。如果任何JPEG文件的路径以-开头,则上述代码中的命令可能出错。解决这个问题并使代码完全安全的一种方法是使用./**/*.jpg而不是**/*.jpg作为查找JPEG文件的glob模式。

jei2mxaa

jei2mxaa2#

cwebp和parallel

我们可以使用以下命令并行转换文件:find . | parallel cwebp -quiet {} -o {.}.webp。但它假设您在目录中,并且所有文件都是可转换的。

find ./src/img/ -type d | sed 's/src\/img/docs\/www/g' | xargs mkdir
find ./src/img/ | egrep '.jpeg|.jpg|.tiff|.tif|.png' | cut -d/ -f3- | parallel --progress 'cwebp -quiet ./src/img/{} -o ./docs/www/{.}.webp'

第一行将./src/img/的目录结构复制到./docs/www/
第二个将jpg/tif/png并行转换为webp

  • (切割f= 3,因为d= /./src/img/中3次)*

相关问题