Você pode fazer isso com um comando find
razoavelmente complicado, que localiza todos os arquivos ".dat" e depois os fecha. Mas colocar a parte do zip em um script separado é muito mais fácil de mostrar:
find . -name '*.dat' -exec my-script {} \;
e my-script
(que tem que estar no seu PATH
):
#!/bin/sh
zip -P my-password -m $(dirname $1)/$(basename $1 .dat).zip $1
e my-password
é claro o que você escolheu.