Оболочка Bash: перечислить все файлы типа .png или.PNG?

В сценарии удара, как я могу сказать 'для всех файлов типа .png или.PNG'?

Я пробую:

for i in (`ls *.PNG` && `ls *.png`)

но получение синтаксической ошибки.

14
задан 21.08.2011, 09:58

0 ответов

Если Вы хотите все возможные комбинации, используйте:

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 или проверку существования на все соответствия файла как это, на всякий случай нет никаких соответствий.

18
ответ дан 07.12.2019, 11:16

Вы могли также попробовать некоторую остроту такой как

найти.-iname "*.png" - должностное лицо....

или

найти.-iname "*.png" | xargs....

Править
См. также комментарий @Yab ниже о рекурсии.

5
ответ дан 07.12.2019, 11:16

ls почти бесполезно здесь, но для записи вот синтаксис ближе к Вашей попытке:

for i in $(ls *.PNG ; ls *.png)

Примечания:

  • Я предполагаю, что Вы хотите и прописные и строчные изображения. && разделитель был бы средства обрабатывать png файлы, только если файлы PNG существуют, который, вероятно, не имеет большого смысла.
  • Вам отобразят сообщения об ошибках, если никакие файлы не будут найдены ни с одним шаблоном.
1
ответ дан 07.12.2019, 11:16

Теги

Похожие вопросы