Bash shell: lista todos os arquivos do tipo .png ou .PNG?

14

Em um script bash, como posso dizer 'para todos os arquivos do tipo .png ou .PNG'?

Estou tentando:

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

mas recebendo um erro de sintaxe.

    
por simon 16.05.2011 / 03:15

3 respostas

18

Se você quiser todas as combinações possíveis, use:

for i in *.[Pp][Nn][Gg]; do

ou

shopt -s nocaseglob
for i in *.png; do

embora esse torne todos os globs de shell do seu script (ou seja, correspondências de arquivo curinga) não seja sensível a maiúsculas até que você execute shopt -u nocaseglob .

Se você realmente quer apenas .PNG e .png (e não, por exemplo, .PnG ou .pnG), use

shopt -s nullglob
for i in *.png *.PNG; do

ou

for i in *.png *.PNG; do
    [[ -e "$i" ]] || continue

... o motivo da verificação da existência de nulos de caracteres ou de existência é que, se você tiver apenas extensões em maiúsculas ou minúsculas, incluirá o padrão não correspondente na lista de arquivos, levando a um erro no corpo do loop. Tal como acontece com nocaseglob, você pode querer desativar a opção de shell nullglob depois (embora na minha experiência, ter o nullglob on geralmente é bom, especialmente em um script). Na verdade, eu prefiro considerar uma boa idéia usar o nocaseglob ou a verificação de existência para todos os arquivos como este, apenas no caso de não haver correspondência.

    
por 16.05.2011 / 03:33
5

Você também pode experimentar uma linha única, como

find . -iname "*.png" -exec ....

ou

find . -iname "*.png" | xargs ....

Editar
Veja também o comentário do @ Yab abaixo sobre a recursão.

    
por 16.05.2011 / 03:49
1

ls é quase inútil aqui, mas para registro está uma sintaxe mais próxima da sua tentativa:

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

Notas:

  • Estou assumindo que você quer imagens maiúsculas e minúsculas. O & & separator significa processar arquivos png apenas se existirem arquivos PNG, o que provavelmente não faz muito sentido.
  • você terá mensagens de erro exibidas se nenhum arquivo for encontrado em qualquer padrão.
por 16.05.2011 / 06:17