Embora isso possa ser feito com um comando canalizado, o find é capaz de fazer isso sozinho:
find /path/to/files -name '*.txt' -exec zip '{}.zip' '{}' ';' -exec rm '{}' ';'
Como você pode imaginar, -exec executa o comando que é terminado por um ponto e vírgula (que está oculto do shell usando aspas ou uma barra invertida) e {} significa o nome do arquivo encontrado e manipulado atualmente (e também está oculto do arquivo). shell).