我试图让我的网站更快,但发现将jpg和png转换为webp可能有所不同,所以我想将主题目录中的所有图像(包括子目录中的所有图像)复制到另一个文件夹中,但要保持原始目录流。
在Google上搜索后,我在此网站上找到了一个脚本,该脚本可以正常工作,并且使用mkdir在新的开始文件夹中使目录流动。但是我的问题是我必须手动编辑脚本并在每个文件夹中运行它。因为我不是使用bash的最佳人选,所以我不知道如何编辑转换脚本以查找所有文件夹并将其复制到新文件夹中。
所以我的问题是是否可以将文件夹结构保留为原始结构,但使用其他基础文件夹?
for file in *.jpg
do
cwebp -q 100 "$file" -o "/var/www/themes/assets/images/webp/${file%.jpg}.webp"
done
答案 0 :(得分:1)
尝试使用此{Shellcheck-clean)代码:
import * from '../config.json'
请注意,我用于测试的#! /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
终止命令行选项的约定。否则,该命令将是(并且应该是)--
。如果任何JPEG文件都具有以cwebp -q 100 -o "$webp_path" -- "$jpg_path"
开头的路径,则上面代码中的命令可能会出错。解决该问题并使代码完全安全的一种方法是使用-
而不是./**/*.jpg
作为查找JPEG文件的全局模式。