Linux 需要将包含图像的子目录的目录转换为webp
我试图使我的网站更快,并发现将jpg和png转换为webp可能会有所不同,因此我想复制我的主题目录中的所有图像,包括在不同文件夹中的子目录中的图像,但保持原始目录流 在谷歌上搜索后,我在这个网站上找到了一个脚本,它可以工作,我使用mkdir在一个新的开始文件夹中创建了目录流。但我的问题是,我必须手动编辑脚本并在每个文件夹中运行它。因为我不是最擅长使用bash的人,所以我不知道如何编辑转换脚本以查看所有文件夹并将它们复制到新文件夹中 因此,我的问题是,是否有一种方法可以保持文件夹结构与原始结构相同,但使用不同的基本文件夹Linux 需要将包含图像的子目录的目录转换为webp,linux,bash,ubuntu,Linux,Bash,Ubuntu,我试图使我的网站更快,并发现将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
请尝试以下(-clean)代码:
请注意,我用于测试的cwebp
版本(愚蠢地)不支持终止命令行选项的--
约定。否则,该命令将是(并且应该是)cwebp-q100-o“$webp\u path”--“$jpg\u path”
。如果任何JPEG文件的路径以-
开头,则上述代码中的命令可能会出错。解决此问题并使代码完全安全的一种方法是使用/***.jpg
而不是***.jpg
作为查找JPEG文件的全局模式
#! /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