O problema é que você não citou o parâmetro -name
. Faça isso:
find . -name '*.java'
Explicação
Sem as aspas, o shell interpreta *.java
como um padrão glob e o expande para qualquer nome de arquivo que corresponda ao glob antes de passá-lo para find
. Dessa forma, se você tivesse, digamos, foo.java
no diretório atual, a linha de comando real de find
seria:
find . -name foo.java
que obviamente listaria o arquivo apenas no diretório atual (a menos que você tenha alguns arquivos com nomes semelhantes mais abaixo na árvore).
As citações impedem a expansão glob e passam a linha de comando para find
as-is.
*.java
arquivos no diretório atual), você teria um de dois comportamentos dependendo de como seu shell é configurado para lidar com globs que não combinam (isto é governado pela opção nullglob
no Bash, por exemplo):
- Se um glob que não corresponder não for expandido pelo shell,
find
(acidentalmente, lembre-se) exibirá o comportamento correto. - Se um glob que não corresponder for expandido em uma string vazia pelo shell,
find
irá reclamar que está faltando um argumento para-name
.