Git Bash循环文件

时间:2018-04-13 13:20:33

标签: bash imagick

好的,我正在尝试遍历目录中的所有图像并对它们进行一些压缩。这是我的代码。

#!/bin/bash
for f in *.jpeg; do 
    echo "Processing $f file..";
    magick convert -quality 85% $f $f
done

以下是它的输出:

 $ bash compress.sh Processing *.jpeg file.. convert: unable to open
 image '*.jpeg': Invalid argument @ error/blob.c/OpenBlob/3094.
 convert: no images defined `*.jpeg' @
 error/convert.c/ConvertImageCommand/3254.

$f引用实际上是字符串“* .jpeg”,这绝对不正确。

这是我的文件夹结构。

folder structure

3 个答案:

答案 0 :(得分:0)

您应该使用适当的文件名掩码(目录和扩展名)查找文件。如果bash不能扩展文件名:

,也应该有跳过路径
#!/bin/bash

IMAGE_PATH=`dirname ${BASH_SOURCE[0]}`/nature
for f in $IMAGE_PATH/*.jpg $IMAGE_PATH/*.jpeg; do 
  echo -n "Processing $f file... ";
  if [ ! -r "$f" ]; then
    echo "skip!";
    continue;
  fi;
  magick convert -quality 85% "$f" "$f";
  echo "done.";
done

PS:"$f"(带引号)用于名称中带空格的文件。

更新:使用脚本目录添加。

答案 1 :(得分:0)

你有一个拼写错误 - .jpg.jpeg。代码没有问题。

答案 2 :(得分:0)

我最终做到了这一点,这就完成了工作。

#!/bin/bash
find ./images -name '*.jpg' | while read FILE; do
    magick convert -quality 75% "$FILE" "$FILE"    
done