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 obtendo um erro de sintaxe.
fonte
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 obtendo um erro de sintaxe.
Se você deseja todas as combinações possíveis, use:
for i in *.[Pp][Nn][Gg]; do
ou
shopt -s nocaseglob
for i in *.png; do
embora isso faça com que todos os globs de shell do seu script (ou seja, correspondências de arquivos curinga) sejam sensíveis a maiúsculas e minúsculas até você executar shopt -u nocaseglob
.
Se você realmente deseja 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 nula ou de existência é que, se você tiver apenas extensões em minúsculas ou apenas em maiúsculas, ele incluirá o padrão incomparável na lista de arquivos, causando um erro no corpo do loop. Como no nocaseglob, você pode desativar a opção de shell nullglob posteriormente (embora, na minha experiência, ter o nullglob ativado seja bom, principalmente em um script). Na verdade, eu considero uma boa ideia usar o nocaseglob ou a verificação de existência para todas as correspondências de arquivos como essa, apenas no caso de não haver correspondências.
for i in *.{png,PNG}
Você também pode tentar uma linha como
ou
Editar
Veja também o comentário de @ Yab abaixo sobre recursão.
fonte
find -maxdepth 1 -iname "*.png"
ls
é quase inútil aqui, mas para o registro, aqui está uma sintaxe mais próxima da sua tentativa:Notas:
fonte