Eu diria que o segundo é mais lento, pois envolve dois processos tree e grep , enquanto o primeiro tem apenas um processo find .
Além disso, tree grava os nomes de todos os arquivos que encontra em seu fluxo de saída, que são consumidos por grep . Ao mesmo tempo, find imprime apenas os nomes dos arquivos correspondentes.
Ao usar find , ele tenta corresponder somente o nome do arquivo ao $filepattern especificado. No segundo caso, o padrão é aplicado ao caminho completo do arquivo. Assim, o segundo caso tem mais dados para processar.
Por outro lado, o gargalo neste teste é disco IO. Ambos find e tree atravessam os diretórios.
Se você executar cada teste um após o outro, o sistema operacional armazenará em cache os dados sobre os diretórios e nomes de arquivos, portanto, o comando será concluído mais rapidamente.