Фон
Преобразование изображений из 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
)? (Использование find
и echo
и grep
кажется тупым.) Это академический вопрос, так как решение работает.