在子文件夹中将图像文件jpg,png批量转换为webp

时间:2018-07-17 14:53:43

标签: linux bash image webp

我找到了一个脚本,可以在Directoy中转换文件 但我需要带有子主管的

你能帮我吗?

#!/bin/bash

PATH=/usr/local/bin:/usr/bin:/bin

# cd to the directory of the image so we can work with just filenames
dir="$(dirname "$1")"
cd "$dir" || exit 1
base="$(basename "$1" .png)"

# create a WebP version of the PNG
cwebp -q 80 "$base".png -o "$base".webp

# delete the WebP file if it is equal size or larger than the original PNG
if [[ `stat -c '%s' "$base".webp` -ge `stat -c '%s' "$base".png` ]]; then
    echo "Deleting WebP file that is no smaller than PNG"
    rm -f "$base".webp
fi

# delete the WebP file if it is size 0
if [[ -f "$base".webp && ! -s "$base".webp ]]; then
    echo "Deleting empty WebP file"
    rm -f "$base".webp
fi

2 个答案:

答案 0 :(得分:2)

好消息:您无需更改脚本!

您可以通过以下命令在根目录下找到所有目录:

find /path/to/root/dir -type d 

,您可以为每个找到的目录添加一些命令的执行:

假设您的脚本名称为 script.sh ,并且它位于您的主目录中,并且您想在当前目录(包括当前目录)下的所有子目录上运行它:

find . -type d -exec ~/script.sh "{}" \;

答案 1 :(得分:1)

当尝试在目录树中查找jpg图像时,我遇到了类似的问题。 tree命令极大地帮助了我。下面是我用于遍历所有目录的示例代码,仅对具有jpg图像的目录起作用。

tree -dfi ${dir_name} | sed 's/$/\//g' | while read line
do
  if [ `ls "${line}" | grep -ci jpg` -gt 0 ]
  then
    some code
  fi
done

在您的情况下,您可以仅对PNG进行grep编码,或者对jpg和png都进行编码。另一种选择是使用文件名查找命令并输出到while循环

find ${dir_name} -type f -name "*.jpg" | while read line
do
  some code
done