Скрипт Bash Водяной знак всех .jpeg без миниатюр - PullRequest
0 голосов
/ 21 мая 2019

проблема

/a.jpg
/a-150x150.jpg
/a-300x300.jpg
/b.jpg
/b-150x150.jpg
/b-300x300.jpg

как мне предоставить водяные знаки для сценария bash только на основном изображении без 150x150 и 300x300, участвующих в водяном знаке?

Я попробовал код, но не работает. 300x300 остаются водяными знаками

file -i *.jpg | grep image | awk -F':' '{ print $1 }' | while read IMAGE

Я просто хочу

/a.jpg
/b.jpg
/c.jpg

1 Ответ

1 голос
/ 21 мая 2019

Вы можете использовать find, чтобы выбрать именно те файлы, которые вам нужны, а затем передать их в цикл while, используя подстановку процесса:

#!/bin/bash

while read filename ; do
    echo "$filename" # your code here
done < <( find . -name '*.jpg' -and -not -regex '.*-[0-9]+x[0-9]+\.jpg' )

Этот код использует -name для выбора всех .jpg изображений и -regex для исключения изображений с шаблоном -<number>x<number> (регулярное выражение должно быть написано так, чтобы оно соответствовало всему имени файла).

Если ваш код должен защищать от экзотических имен файлов даже с помощью новой строки, вы должны использовать переключатель -print0 с find и переключатель -d $'\0' с read.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...