Ubuntu скрывает все изображения в папке

Я использую скрипт для преобразования всех изображений в моей папке в режим флопа. Сценарий выглядит так:

for f in *.jpg; do new="${f%%.jpg}_flop.jpg"; convert "$f" -flop -quality 100 "$new"; done 

Теперь я обнаружил, что могут быть изображения с расширением .JPG Я думал о добавлении нового цикла цикла, который выглядит так:

 for f in *.JPG; do new="${f%%.jpg}_flop.jpg"; convert "$f" -flop -quality 100 "$new"; done 

Я думаю, что есть синтаксис для игнорирования случая, и таким образом я могу сделать один цикл вместо 2, любую помощь?

Более того, если будут также расширения .jpeg или .JPEG , есть ли синтаксис для этого тоже?

Вы можете просто сделать

 for f in *.jpg *.JPG; do ... 

Если вам нужно одно выражение, вы можете использовать расширение extglob в Bash.

 set -o extglob for f in *.@(JP@(|E)G|jp@(|e)g); do ... 

Чтобы сделать флеш-регистр нечувствительным, вы можете shopt -s nocaseglob но нет конкретного синтаксиса, чтобы сделать одно выражение glob без shopt -s nocaseglob регистра.

Вы также можете использовать слегка неточную

 for f in *.[Jj][Pp][Gg] *.[Jj][Pp][Ee][Gg]; do ... 

чтобы не учитывать регистр-insensitively.

Что-то в этом роде:

 #/bin/bash shopt -s nullglob # don't give error messages if no matching files shopt -s nocaseglob # ignore case for f in *.jpg *.jpeg; do new=${f/.[Jj][Pp][Ee][Gg]/} # strip extension new=${new/.[Jj][Pp][Gg]/} # whether JPEG or jpg new="$new_flop.jpg" convert "$f" -flop -quality 100 "$new" done 

У меня есть скрипт, который делает что-то похожее:

 for file in {*.jpg,*.JPG}; do mv "$file" "old$file" convert -resize 3000000@\> "old$file" -quality 80 "$file" rm "old$file" done 

Я также сделал видео, объясняющее это: http://sofru.miximages.com/ubuntu/watch}_flop.jpg”; echo convert “$f” -flop -quality 100 “$new”; done

Регулярные выражения – ваш друг.