文件名中的空格

时间:2019-04-19 09:58:21

标签: bash shell sh

我尝试运行用于将图像转换为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

1 个答案:

答案 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