Concordo com as outras respostas sobre a maneira correta de percorrer os arquivos. No entanto, o OP perguntou:
O código acima não funciona, sabe por quê?
Sim!
Um excelente artigo Qual é a diferença entre teste, [e [[?] Explica em detalhes que, entre outras diferenças, você não pode usar expression matching
ou pattern matching
dentro do test
comando (que é uma abreviação de [
)
Novo teste de recurso [[teste antigo [Exemplo
Correspondência de padrões = (ou ==) (não disponível) [[$ name = a *]] || echo "nome não começa com um 'a': $ nome"
Expressão regular = ~ (não disponível) [[$ (data) = ~ ^ Sex \ ... \ 13]] && echo "É sexta-feira, dia 13!"
Coincidindo
Portanto, esta é a razão da falha do seu script. Se o OP estiver interessado em uma resposta com a [[
sintaxe (que tem a desvantagem de não ser suportada em tantas plataformas quanto o [
comando), ficaria feliz em editar minha resposta para incluí-la.
EDITAR: Quaisquer procedimentos sobre como formatar os dados na resposta como uma tabela seriam úteis!
for i in $(ls *.java); do echo "do something with file $i"; done
?