我尝试运行用于将图像转换为webp格式的脚本。 一切都很好,但是当文件(或整个文件夹)的名称中带有空格时,我的脚本不起作用。
我使用Imagemagik(Ubuntu 16.04)将图像转换为相同位置的webp副本(并保持相同的文件名)。保持相同的文件名,文件位置并使用递归浏览来压缩每个文件非常重要。
例如,在运行脚本时:
复制images / cmsA / fileA.png并将其转换为images / cmsA / fileA.webp
但是
images / cmsB / file A.png
或
images / cms B / fileA.png
未转换。
我知道我的论点出了点问题(或者在某处缺少“,我曾尝试将其放入,但我认为我做错了)
有人可以解决吗?
这是我的剧本:
谢谢:)
#!/bin/bash
# Convert all images to WebP
IMAGE_PATHS="img/ motor/ motor2/ modules/"
for SRC in $(find $IMAGE_PATHS -name "*.png" -o -name "*.jpg" -o -name "*.jpeg" -o -name "*.gif"); do
WEBP="${SRC%.*}.webp"
if [ "$SRC" -nt "$WEBP" ]; then
echo "Converting to $WEBP"
convert "$SRC" -define webp:alpha-compression=1 -define webp:auto-filter=true -define webp:alpha-quality=90 -quality 95 "$WEBP"
fi
done
编辑:感谢@alecxs
解决了我的问题#!/bin/bash
# Convert all images to WebP
IMAGE_PATHS="img/ modules/"
find $IMAGE_PATHS -type f \( -iname "*.png" -o -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.gif" \) -print0 | sort -z | while read -r -d $'\0' SRC;
do
WEBP="${SRC%.*}.webp"
if [ "$SRC" -nt "$WEBP" ]; then
echo "Converting to $WEBP"
convert "$SRC" -define webp:alpha-compression=1 -define webp:auto-filter=true -define webp:alpha-quality=90 -quality 95 "$WEBP"
fi
done
答案 0 :(得分:0)
要捕获所有文件名,无论它们包含什么字符,都可以使用NUL字符作为内置读取的分隔符,并与while循环结合使用(并在需要时进行排序)。
请注意,文件名区分大小写,在比较之前,应通过字符串操作将字符串转换为小写。使用find -iname捕获所有文件。
find $IMAGE_PATHS -type f \( -iname "*.png" -o -iname "*.jpg" -o -iname "*.jpeg" -o -iname *.gif" \) -print0 | sort -z | while read -r -d $'\0' SRC
do
...
# if [ "${SRC,,}" != "${WEBP,,}" ]
if [ "$SRC" -nt "$WEBP" ]
...
done