-not e -delete são extensões não padrão.
Não há motivo para usar -not , quando há um equivalente mais curto: ! .
Para -delete , você terá que invocar rm com o predicado -exec :
find . ! -name '*.jpg' ! -name '*.txt' -type f -exec rm -f '{}' +
(se você tiver uma versão mais antiga do busybox, talvez seja necessário o -exec rm -f '{}' ';' , que executa um rm por arquivo).
Esse comando acima é padrão, portanto, funcionará não apenas no busybox, mas também com outras implementações modernas não-GNU de find .
Note que pelo menos em sistemas GNU, esse comando (com qualquer find de implementação, desde que use GNU fnmatch(3) ) ainda pode remover alguns arquivos cujo nome termina em .jpg ou .txt , como o% O padrão*.jpg não corresponderia aos arquivos cujo nome contém caracteres inválidos na localidade atual.
Para contornar isso, você precisaria:
LC_ALL=C find . ! -name '*.jpg' ! -name '*.txt' -type f -exec rm -f '{}' +
Observe também que, contrariamente ao -delete do GNU, essa abordagem não funcionará em árvores de diretório muito profundas, pois você acabaria alcançando o tamanho máximo de um caminho de arquivo passado à chamada do sistema unlink() . AFAIK, com find , não há como evitar que a implementação find não suporte -execdir nem -delete .
Você também pode querer ler o considerações de segurança discutidas no GNU find manual se você for executar esse comando em um diretório gravável por outros.