Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 需要将包含图像的子目录的目录转换为webp_Linux_Bash_Ubuntu - Fatal编程技术网

Linux 需要将包含图像的子目录的目录转换为webp

Linux 需要将包含图像的子目录的目录转换为webp,linux,bash,ubuntu,Linux,Bash,Ubuntu,我试图使我的网站更快,并发现将jpg和png转换为webp可能会有所不同,因此我想复制我的主题目录中的所有图像,包括在不同文件夹中的子目录中的图像,但保持原始目录流 在谷歌上搜索后,我在这个网站上找到了一个脚本,它可以工作,我使用mkdir在一个新的开始文件夹中创建了目录流。但我的问题是,我必须手动编辑脚本并在每个文件夹中运行它。因为我不是最擅长使用bash的人,所以我不知道如何编辑转换脚本以查看所有文件夹并将它们复制到新文件夹中 因此,我的问题是,是否有一种方法可以保持文件夹结构与原始结构相同

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