如何对包含空格的文件执行命令?
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
....
但这只适用于文件名不包含换行符的情况。对于带有换行符的文件,还有其他解决方案。有需要请自取。
我正在处理遗留代码库,我们试图使用 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
....
但这只适用于文件名不包含换行符的情况。对于带有换行符的文件,还有其他解决方案。有需要请自取。