Vamos primeiro desmontar o seu comando:
find /var/www/html/* -type d -name 'phpmyadmin' -maxdepth 0 ! -exec cd * && wp plugin update --all {} \;
O que isso realmente vai fazer é:
- O shell vai expandir
/var/www/html/*. Vamos supor que se expande para/var/www/html/fooe/var/www/html/bar. - O shell vai expandir
*(o seucd *). Note que este é o diretório de trabalho atual. Vamos supor que você tenhapopetart. - O shell executará
find /var/www/html/foo /var/www/html/bar -type d -name phpmyadmin -maxdepth 0 ! -exec cd pop tart. -
findlançará um erro sobre um comando não finalizado porque viu-exec, mas não;ou+.
Então, para ficar claro o que está acontecendo, o shell está quebrando a linha, e passando apenas parte do que você queria ser um argumento para find .
A maneira mais clara e simples de fazer isso com find é:
find /var/www/html/* -type d -name phpmyadmin -maxdepth 0 -exec sh -c 'cd "$1" && wp plugin update --all' -- {} \;
Isto cita o comando inteiro, alimenta-o para sh e, em seguida, passa o diretório como um argumento.
Além disso, esse é o gosto pessoal, mas para coisas como essa, eu diria que é mais fácil não usar find :
for dir in /var/www/html/*/; do cd "$dir" && wp plugin update --all; done