背景

背景

背景

将图像从 RGB 转换为灰度。不同目录中存在许多文件。例如:

outline/trigon.png
outline/oval-bw.png
outline/crescent-bw.png
outline/trigon-bw.png
outline/crescent.png
outline/oval.png

问题

遍历一组文件(不带连字符)并将它们转换为灰度,不包括已转换的文件。已转换的文件的文件名以 结尾-bw.png。脚本应避免创建-bw-bw.png文件。

解决方案

以下行将仅迭代尚未转换的文件:

for i in $(find ./stripe/ ./outline ./solid -name "*.png" -exec echo {} \; | grep -v "-"); do

完整脚本:

#!/bin/bash

# Avoid converting existing B&W files...
for i in $(find ./stripe/ ./outline ./solid -name "*.png" -exec echo {} \; | grep -v "-"); do
  SHAPEDIR=$(dirname $i)
  SHAPENAME=$(basename $i .png)
  OUTPUTSHAPE=$SHAPEDIR/$SHAPENAME-bw.png
  echo "convert $i to $OUTPUTSHAPE ..."
  convert $i -density 600 -colorspace gray $OUTPUTSHAPE
done

问题

有什么更简单的方法可以迭代所有文件,同时忽略-bw名称中带有连字符(例如)的文件?(使用findechogrep似乎很难理解。)这是一个学术问题,因为解决方案有效。

答案1

使用 bash 扩展的通配符模式:

$ shopt -s extglob
$ echo outline/!(*-*)
outline/crescent.png outline/oval.png outline/trigon.png

相关内容