Відповіді:
Якщо вам потрібні всі можливі комбінації, використовуйте:
for i in *.[Pp][Nn][Gg]; do
або
shopt -s nocaseglob
for i in *.png; do
хоча ця робота зробить всі регістри оболонок вашого сценарію (тобто відповідність файлів підстановок), нечутливими до запуску shopt -u nocaseglob
.
Якщо ви дійсно хочете просто .PNG та .png (а не, наприклад, .PnG чи .pnG), тоді використовуйте або
shopt -s nullglob
for i in *.png *.PNG; do
або
for i in *.png *.PNG; do
[[ -e "$i" ]] || continue
... Причина перевірки nullglob або існування полягає в тому, що якщо у вас є лише малі або великі розширення з великого регістру, вона буде включати незрівнянний шаблон у список файлів, що призводить до помилки в тілі циклу. Як і у випадку з nocaseglob, ви, можливо, захочете згодом вимкнути параметр оболонки nullglob (хоча, на мій досвід, включення nullglob часто добре, особливо в сценарії). Насправді я вважаю гарною ідеєю використовувати або nocaseglob, або перевірку існування для всіх відповідностей файлів, як це, на всякий випадок, якщо немає відповідностей.
Ви також можете спробувати якийсь один вкладиш, наприклад
знайти. -iname "* .png" -exec ....
або
знайти. -iname "* .png" | xargs ....
Редагувати
Дивіться також коментар @ Yab нижче про рекурсію.
find -maxdepth 1 -iname "*.png"
ls
тут майже марно, але для запису ось синтаксис, наближений до вашої спроби:
for i in $(ls *.PNG ; ls *.png)
Примітки:
for i in *.{png,PNG}