如何对包含空格的文件执行命令?

How to execute command on files with spaces in them?

我正在处理遗留代码库,我们试图使用 cwebp 命令将所有 jpeg/png 文件转换为 webp 格式。不幸的是,许多图像文件的名称中都带有空格。 示例:i am poorly named.jpg

因此,当 运行 以下 bash 脚本查找目录中的所有 jpeg 并循环遍历并转换它们时,空格分隔的单词将被视为另一个文件,因此图像永远不会被转换。 我们不想删除空格,只是创建一个同名的 webp 文件。

files=$(find ./ -type f -name  "*.jpg")
for jpg in $files
do
  webp="${jpg/%jpg/webp}";
  if [ ! -f $webp ]; then
    echo "The webp version does not exist";
    cwebp -q 80 "$jpg" -o "$webp";
  fi
done

我试过在上面的代码中 do 之后立即放置 jpg=$(printf '%q' "$jpg") 以及其他东西。

如果文件 i am poorly named.jpg 存在,我希望创建 i am poorly named.webp

但是没有真正的理由存储所有文件名。所以另一种选择是:

find ./ -type f -name  "*.jpg" | while read jpg
do 
....

但这只适用于文件名不包含换行符的情况。对于带有换行符的文件,还有其他解决方案。有需要请自取。