Я нашел сообщение здесь Как я могу запустить mogrify, но с префиксом имени файла? который говорит об изменении размера партии изображений.

В нем есть сценарий for in оболочки. Как мне, за исключением некоторых отдельных файлов, в то время как итерация большинства остальных из них.

for image in *.png; do convert "$image" -resize 29.5% "$(dirname $image)/th_$(basename $image)"; done

Например:

У меня есть эти файлы в моей папке (у них нет общих имен, таких как префикс):

example_1_some_suffix.png
some_prefix_example_2.png
example_3.png
example_4.png
example_a.png

Я могу использовать for images in *.png все итерации, но что если я захочу сделать что-то только с первыми четырьмя файлами, а пятый пропустить?

2 ответа2

1

Вы можете включить extglob, чтобы иметь возможность указать маску более подробно

shopt -s extglob
for image in ?(a)+(b)*.png ; do ...

Если вы просто хотите пропустить данный файл, вы можете сделать

for image in *.png ; do
    [[ $image == file-to-skip.png ]] && continue
    ...
1

Предполагая, что у вас есть версия 4 bash:

declare -A exceptions=(
    [example_1_some_suffix.png]=skip
    [some_prefix_example_2.png]=skip
    [example_3.png]=skip
    [example_4.png]=skip
    [example_a.png]=skip
)
for image in *.png; do 
    [[ "${exceptions["$image"]}" == skip ]] && continue 
    # ...

Без использования ассоциативных массивов:

exceptions=(
    example_1_some_suffix.png 
    some_prefix_example_2.png 
    example_3.png 
    example_4.png 
    example_a.png 
)
for image in *.png; do 
    [[ " ${exceptions[*]} " == *" $image "* ]] && continue 
    # ...

Все кавычки и пробелы обязательны.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .