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.