Em:
find * ...
como uma linha de comando do shell, * é um glob que é expandido pelo shell para a lista (lexicamente ordenada) de entradas não ocultas no diretório atual (com alguns shells, que seriam apenas as entradas que contêm somente caracteres válidos como * como um padrão significam 0 ou mais caracteres ).
Assim, se o diretório atual contiver essas entradas:
-
.
-
..
-
.htaccess
-
file.txt
-
-foo-
find será chamado com esses argumentos: find , -foo- , file.txt (e ... ). find provavelmente se queixará do -foo- que é uma opção ou predicado inválido.
Mesmo se você usar:
find -- * ...
Isso não funcionará corretamente para arquivos com o nome -anything ou ! ou ( ..., pois -- informará apenas find para parar de procurar opções (como -L , -H ) não para predicados.
Você pode usar:
find ./* ...
para evitar os problemas, mas, novamente, omitir arquivos ocultos, omitir arquivos com caracteres inválidos ou quebrar (com lista de argumentos muito longa ) se houver muitos arquivos no arquivo atual diretório.
Com:
find . ...
Você só passa . para find . . é o diretório atual. Então, é find , não o shell que procurará arquivos lá (inclui . na profundidade 0, todas as entradas exceto . e .. (outras entradas ocultas incluídas) na profundidade 1 e todas as outras entradas para subdiretórios (ainda excluindo . e .. ) de forma recursiva.
Você só deseja usar:
find ./* ...
Se você quiser que a lista de arquivos na profundidade 1 (e profundidade 1 somente) seja classificada e queira excluir arquivos ocultos na profundidade 1 (e novamente na profundidade 1 somente). O que seria muito improvável.
Se você quiser excluir arquivos ocultos, adicione um ! -name '.*' ou -name '[!.]*' (embora tenha cuidado com nomes de arquivos com caracteres inválidos, e isso também incluirá o diretório de nível superior dado a find . , que acontece com coincidir com esse padrão).
Se você quisesse classificar em todos os níveis, provavelmente desejaria recorrer a zsh e a sua globalização recursiva com qualificadores glob.
O motivo pelo qual você está obtendo resultados diferentes é muito provavelmente que, em find * , o find comece procurando (está sendo instruído a procurar) no primeiro arquivo ou diretório no diretório atual em ordem alfabética , e com find . , olha para . em si, mas depois o primeiro arquivo ou diretório lá em uma ordem diferente (pode ser a ordem em que as entradas são armazenadas no diretório, mas algumas find implementations também classificam a lista pelo número do inode como uma tentativa de minimizar as buscas na cabeça do disco).
BTW, a melhor maneira de escrever seu comando provavelmente seria:
find . \( -name @eaDir -o -iname .DS_Store -o -iname Thumbs.db \) \
-prune -o -mtime -25 -type f -print
Isso indica ao find para ignorar esses diretórios e seu conteúdo (nem mesmo tentar olhar dentro deles).