A página do zip man diz:
zip ... [zipfile [file ...]] [-xi list]
Assim, o nome do arquivo zip e o caminho para a estrutura que você deseja compactar devem vir antes da sua lista de exclusão.
Esta parte do seu comando não será aplicada corretamente:
-x 'public/images/'
Porque ele não especifica arquivos na maneira como o zip reconhece.
Isso funcionará:
zip -r my.zip /var/www/html/m4/ -x /var/www/html/m4/public/images/\*
- Como você sabe,
-r
é recursivo. -
-x
é usado para excluir (arquivos), -
\
before*
é usado para evitar expansão de nome de arquivo pelo shell; deixamos isso parazip
.