gpt4 book ai didi

linux - 需要将带有图像的子目录的目录转换为 webp

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:33:07 26 4
gpt4 key购买 nike

我试图让我的网站更快,但发现将 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

最佳答案

试试这个(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 作为 glob模式来查找 JPEG 文件。

关于linux - 需要将带有图像的子目录的目录转换为 webp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54255663/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com