Como você diz que tem uma estrutura de pastas aninhada, acredito que *data*/*txt
não fará o que você precisa. Eu sugiro
find . –type d –name "*data*" –exec sh –c "grep sampletext /dev/null {}/*.txt" \;
O /dev/null
está lá para forçar o grep
a exibir o nome do arquivo mesmo quando executado em um diretório que tenha apenas um arquivo .txt
.